Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/pom.xml
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/pom.xml	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/pom.xml	(revision 798)
@@ -0,0 +1,83 @@
+<?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.hyperlink.app</artifactId>
+	<packaging>pom</packaging>
+	<version>1.0.154</version>
+	<name>${project.artifactId}</name>
+	<description>View. Hyperlink support</description>
+	
+    <parent>
+        <groupId>org.gvsig</groupId>
+        <artifactId>org.gvsig.desktop</artifactId>
+        <version>2.0.342</version>
+    </parent>
+        
+	<url>https://devel.gvsig.org/redmine/projects/gvsig-hyperlink</url>
+	
+    <scm>
+        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-hyperlink/org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154</connection>
+        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-hyperlink/org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154</developerConnection>
+        <url>scm:svn:https://devel.gvsig.org/svn/gvsig-hyperlink/org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154</url>
+    </scm>
+    
+	<build>
+        <plugins>
+		    <plugin>
+		      <artifactId>maven-release-plugin</artifactId>
+		      <configuration>
+		        <tagBase>https://devel.gvsig.org/svn/gvsig-hyperlink/org.gvsig.hyperlink.app/tags</tagBase>
+		      </configuration>
+		    </plugin>			
+     
+        </plugins>   
+    </build>
+    
+	<developers>
+		<developer>
+			<id>jjdelcerro</id>
+			<name>Joaquín José del Cerro</name>
+			<email>jjdelcerro@gvsig.org</email>
+			<roles>
+				<role>Architect</role>
+				<role>Developer</role>
+			</roles>
+		</developer>
+		<developer>
+			<id>cordinyana</id>
+			<name>Cèsar Ordiñana</name>
+			<email>cordinyana@gvsig.com</email>
+			<roles>
+				<role>Architect</role>
+				<role>Developer</role>
+			</roles>
+		</developer>
+	</developers>
+	<distributionManagement>
+		<site>
+			<id>gvsig-repository</id>
+            <url>dav:https://devel.gvsig.org/sites/org.gvsig.hyperlink.app/${project.version}</url>
+		</site>
+	</distributionManagement>
+	<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>
+	<modules>
+		<module>org.gvsig.hyperlink.app.extension</module>
+	</modules>
+</project>
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/buildNumber.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/buildNumber.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/buildNumber.properties	(revision 798)
@@ -0,0 +1,2 @@
+#Tue Nov 16 20:05:14 CET 2021
+buildNumber=2241
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_el.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_el.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_el.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [el]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=\u0391\u03c0\u03bf\u03b4\u03bf\u03c7\u03ae
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=\u03a0\u03b5\u03b4\u03af\u03bf
+Cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+Capa=\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03bf
+de=\u03c4\u03bf\u03c5
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en.properties	(revision 798)
@@ -0,0 +1,49 @@
+#Translations for language [en]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=10 pages forward
+Aceptar=Accept
+Action=Action
+Actions=Actions
+Add_action=Add action
+Advanced_Hyperlink=Advanced Hyperlink
+Campo=Field
+Cancel=Cancel
+Capa=Layer
+de=of
+diez_paginas_atras=10 pages backward
+Enable_hyperlink=Enable hyperlink
+Error_reading_layer_fields=Error reading layer fields
+Extension=Extension
+HTML_and_text_formats=Link to text and HTML files
+HTML_and_text_formats_in_system_application=Link to text and HTML files (in browser)
+Hyperlink=Hyperlink
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_settings=Hyperlink settings
+Hyperlink_Settings=Hyperlink Settings
+Image_format=Link to image files
+imprimir=Print
+Load_Raster_Layer=Load raster layer
+Load_Vector_Layer=Load Vector Layer
+Loads_raster_layers_in_gvSIG=Loads raster layers in active view
+Loads_vector_layers_in_gvSIG=Loads vector layers in active view
+Pagina=Page
+pagina_atras=Previous page
+pagina_delante=Next page
+PDF_format=Link to PDF files
+pdf_viewer=PDF viewer
+primera_pagina=First page
+Remove_action=Remove action
+Shows_HTML_or_text_files_in_gvSIG=Use internal viewer for HTML and text files
+Shows_HTML_or_text_files_in_system_application=Use internal viewer for HTML and text files (in browser)
+Shows_HTML_or_text_files_inside_gvSIG=Shows HTML or text files in gvSIG
+Shows_image_files_in_gvSIG=Shows image files in gvSIG
+Shows_PDF_files_in_gvSIG=Shows PDF files in gvSIG
+Shows_SVG_files_in_gvSIG=Shows SVG files in gvSIG
+SVG_format=Link to SVG files
+ultima_pagina=Last Page
+valor_incorrecto=Incorrect value
+View_Tools_Query=View tools query
+Bad_path=The path does not exist
+Shows_Folders_in_gvSIG=Shows linked Folders
+Folder_formats=Link to Folders
\ No newline at end of file
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_gl.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_gl.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_gl.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [gl]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Aceptar
+Action=Acci\u00f3n
+Actions=Acci\u00f3ns
+Add_action=Engadir acci\u00f3n
+Advanced_Hyperlink=Hiperenlace avanzado
+Campo=Campo
+Cancel=Cancelar
+Capa=Capa
+de=de
+diez_paginas_atras=
+Enable_hyperlink=Activar hiperenlace
+Error\ reading\ layer\ fields=
+Extension=Extensi\u00f3n
+HTML_and_text_formats=Enlazar con arquivos de texto e HTML
+Hyperlink=Hiperenlace
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Configurar Hiperenlace
+Image_format=Enlazar con arquivos de imaxe
+imprimir=
+Load_Raster_Layer=Cargar capa r\u00e1ster
+Load_Vector_Layer=Cargar capa vectorial
+Loads_raster_layers_in_gvSIG=Carga capas raster na vista activa
+Loads_vector_layers_in_gvSIG=Carga capas vectoriais na vista activa
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Enlazar con arquivos PDF
+pdf_viewer=
+primera_pagina=
+Remove_action=Eliminar acci\u00f3n
+Shows_HTML_or_text_files_in_gvSIG=Amosa arquivos HTML ou de texto en gvSIG
+Shows_image_files_in_gvSIG=Amosa imaxes en gvSIG
+Shows_PDF_files_in_gvSIG=Amosa arquivos PDF en gvSIG
+Shows_SVG_files_in_gvSIG=Amosa arquivos SVG en gvSIG
+SVG_format=Enlazar cos arquivos SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_cs.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_cs.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_cs.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [cs]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Budi\u017e
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=Pole
+Cancel=Zru\u0161it
+Capa=Vrstva
+de=of
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt_BR.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt_BR.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt_BR.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [pt_BR]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=10 p\u00e1ginas adiante
+Aceptar=Aceitar
+Action=A\u00e7\u00e3o
+Actions=A\u00e7\u00f5es
+Add_action=Adicionar a\u00e7\u00e3o
+Advanced_Hyperlink=Hiperlink avan\u00e7ado
+Campo=Campo
+Cancel=Cancelar
+Capa=Plano de Informa\u00e7\u00e3o
+de=de
+diez_paginas_atras=
+Enable_hyperlink=Ativar hiperlink
+Error\ reading\ layer\ fields=
+Extension=Extens\u00e3o
+HTML_and_text_formats=Linkar com arquivo de texto e HTML
+Hyperlink=Hiperlink
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Configurar hiperlink
+Image_format=Link com arquivo de imagem
+imprimir=
+Load_Raster_Layer=Carregar plano de informa\u00e7\u00e3o de imagem
+Load_Vector_Layer=Carregar Plano de Informa\u00e7\u00e3o Vetorial
+Loads_raster_layers_in_gvSIG=Carregar plano de informa\u00e7\u00e3o de imagem no bloco ativo.
+Loads_vector_layers_in_gvSIG=Carregar plano de informa\u00e7\u00e3o vetorial no Bloco ativo
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Conectar com arquivo PDF
+pdf_viewer=
+primera_pagina=
+Remove_action=Remover edi\u00e7\u00e3o
+Shows_HTML_or_text_files_in_gvSIG=Mostrar arquivos HTML ou de texto no gvSIG
+Shows_image_files_in_gvSIG=Mostrar imagem no gvSIG
+Shows_PDF_files_in_gvSIG=Mostrar arquivo PDF no gvSIG
+Shows_SVG_files_in_gvSIG=Mostrar arquivo SVG no gvSIG
+SVG_format=Linkar ao arquivo SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_fr.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_fr.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_fr.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [fr]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Accepter
+Action=Op\u00e9ration
+Actions=Op\u00e9rations
+Add_action=Ajouter op\u00e9ration
+Advanced_Hyperlink=Hyperlien avanc\u00e9
+Campo=Champ
+Cancel=Annuler
+Capa=Couche
+de=de
+diez_paginas_atras=
+Enable_hyperlink=Activer hyperlien
+Error\ reading\ layer\ fields=
+Extension=Extension
+HTML_and_text_formats=Lier \u00e0 des fichiers texte ou HTML
+Hyperlink=Hyperlien
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Configuration hyperlien
+Image_format=Lier \u00e0 des fichiers image
+imprimir=
+Load_Raster_Layer=Charger une couche Raster
+Load_Vector_Layer=Charger couche vecteur
+Loads_raster_layers_in_gvSIG=Charger des couches Raster dans la vue active
+Loads_vector_layers_in_gvSIG=Charger des couches vecteurs dans la vue active
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Lier \u00e0 des fichiers PDF
+pdf_viewer=
+primera_pagina=
+Remove_action=Supprimer op\u00e9ration
+Shows_HTML_or_text_files_in_gvSIG=Affiche les fichiers HTML ou texte dans gvSIG
+Shows_image_files_in_gvSIG=Affiche les fichiers images dans gvSIG
+Shows_PDF_files_in_gvSIG=Affiche les fichiers PDF dans gvSIG
+Shows_SVG_files_in_gvSIG=Affiche les fichiers SVG dans gvSIG
+SVG_format=Lier \u00e0 des fichiers SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en_US.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en_US.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_en_US.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [en_US]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Ok
+Action=Action
+Actions=Actions
+Add_action=Add action
+Advanced_Hyperlink=Advanced hyperlink
+Campo=Field
+Cancel=Cancel
+Capa=Layer
+de=of
+diez_paginas_atras=
+Enable_hyperlink=Enable hyperlinks
+Error\ reading\ layer\ fields=
+Extension=Extension
+HTML_and_text_formats=Link to text and HTML files
+Hyperlink=Hyperlink
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Hyperlink settings
+Image_format=Link to image files
+imprimir=
+Load_Raster_Layer=Load raster layer
+Load_Vector_Layer=Load vector layer
+Loads_raster_layers_in_gvSIG=Loads raster layers into active view
+Loads_vector_layers_in_gvSIG=Loads vector layers into active view
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Link to PDF files
+pdf_viewer=
+primera_pagina=
+Remove_action=Remove action
+Shows_HTML_or_text_files_in_gvSIG=Use internal viewer for HTML and text files
+Shows_image_files_in_gvSIG=Use internal viewer for image files
+Shows_PDF_files_in_gvSIG=Use internal viewer for PDF files
+Shows_SVG_files_in_gvSIG=Use internal viewer for SVG files
+SVG_format=Link to SVG files
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_eu.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_eu.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_eu.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [eu]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Ados
+Action=Ekintza
+Actions=Ekintzak
+Add_action=Gehitu ekintza
+Advanced_Hyperlink=Hiperesteka aurreratua
+Campo=Eremua
+Cancel=Utzi
+Capa=Geruza
+de=hemendik
+diez_paginas_atras=
+Enable_hyperlink=Aktibatu hiperesteka
+Error\ reading\ layer\ fields=
+Extension=Luzapena
+HTML_and_text_formats=Estekatu testu-fitxategietara eta HTML-ra
+Hyperlink=Hiperesteka
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Konfiguratu hiperestekak
+Image_format=Estekatu irudi-fitxaregietara
+imprimir=
+Load_Raster_Layer=Kargatu raster geruza
+Load_Vector_Layer=Kargatu geruza bektoriala
+Loads_raster_layers_in_gvSIG=Geruza rasterrak kargatzen ditu bistan
+Loads_vector_layers_in_gvSIG=Geruza bektorialak kargatzen ditu bistan
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Estekatu PDF fitxategiei
+pdf_viewer=
+primera_pagina=
+Remove_action=Kendu ekintza
+Shows_HTML_or_text_files_in_gvSIG=HTML fitxategiak edo testu-fitxategiak  erakusten ditu gvSIGen
+Shows_image_files_in_gvSIG=Irudiak erakusten ditu gvSIGen
+Shows_PDF_files_in_gvSIG=PDF fitxategiak erakusten ditu gvSIGen
+Shows_SVG_files_in_gvSIG=SVG fitxategiak erakusten ditu gvSIGen
+SVG_format=SVG fitxategietara estekatu
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_nl.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_nl.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_nl.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [nl]
+#Tue Aug 11 10:49:14 CEST 2009
+10_paginas_delante=
+Aceptar=OK
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=
+Cancel=
+Capa=Laag
+de=
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pl.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pl.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pl.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [pl]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Akceptuj
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=
+Cancel=
+Capa=Warstwa
+de=
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_it.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_it.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_it.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [it]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Accetta
+Action=Azione
+Actions=Azioni
+Add_action=Aggiungi azione
+Advanced_Hyperlink=Hyperlink avanzato
+Campo=Campo
+Cancel=Cancella
+Capa=Layer
+de=di
+diez_paginas_atras=
+Enable_hyperlink=Abilita hyperlink
+Error\ reading\ layer\ fields=
+Extension=Estensione
+HTML_and_text_formats=Collega a file di testo e HTML
+Hyperlink=Collegamento
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Impostazioni Collegamento
+Image_format=Collegamento a file immagine
+imprimir=
+Load_Raster_Layer=Carica Livello raster
+Load_Vector_Layer=Carica Livello vettoriale
+Loads_raster_layers_in_gvSIG=Carica i Livelli raster nella vista attiva
+Loads_vector_layers_in_gvSIG=Carica i Livelli vettoriali nella vista attiva
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Collega a file PDF
+pdf_viewer=
+primera_pagina=
+Remove_action=Annulla azione
+Shows_HTML_or_text_files_in_gvSIG=Mostra file HTLM o di testo in gvSIG
+Shows_image_files_in_gvSIG=Mostra file immagine in gvSIG
+Shows_PDF_files_in_gvSIG=Mostra file PDF in gvSIG
+Shows_SVG_files_in_gvSIG=Mostra file SVG in gvSIG
+SVG_format=Collega a file SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text.properties	(revision 798)
@@ -0,0 +1,47 @@
+#Translations for language [es]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=10 p\u00e1ginas hacia adelante
+Aceptar=Aceptar
+Action=Acci\u00f3n
+Actions=Acciones
+Add_action=A\u00f1adir acci\u00f3n
+Advanced_Hyperlink=Hiperenlace avanzado
+Campo=Campo
+Cancel=Cancelar
+Capa=Capa
+de=de
+diez_paginas_atras=10 p\u00e1ginas hacia atr\u00e1s
+Error_reading_layer_fields=Error leyendo los campos de la capa
+Extension=Extensi\u00f3n
+HTML_and_text_formats=Enlazar con ficheros de texto y HTML
+HTML_and_text_formats_in_system_application=Enlazar con ficheros de texto y HTML (navegador)
+Hyperlink=Hiperenlace
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_settings=Configurar hiperenlace
+Hyperlink_Settings=Configurar Hiperenlace
+Image_format=Enlazar con ficheros de imagen
+imprimir=Imprimir
+Load_Raster_Layer=Cargar capa r\u00e1ster
+Load_Vector_Layer=Cargar capa vectorial
+Loads_raster_layers_in_gvSIG=Carga capas r\u00e1ster en la vista activa
+Loads_vector_layers_in_gvSIG=Carga capas vectoriales en la vista activa
+Pagina=P\u00e1gina
+pagina_atras=P\u00e1gina anterior
+pagina_delante=P\u00e1gina siguiente
+PDF_format=Enlazar con ficheros PDF
+pdf_viewer=Visor de PDF
+primera_pagina=Primera p\u00e1gina
+Remove_action=Eliminar acci\u00f3n
+Shows_HTML_or_text_files_in_gvSIG=Muestra ficheros HTML o de texto en gvSIG
+Shows_HTML_or_text_files_in_system_application=Muestra ficheros HTML o de texto (navegador)
+Shows_image_files_in_gvSIG=Muestra im\u00e1genes en gvSIG
+Shows_PDF_files_in_gvSIG=Muestra ficheros PDF en gvSIG
+Shows_SVG_files_in_gvSIG=Muestra ficheros SVG en gvSIG
+SVG_format=Enlazar con ficheros SVG
+ultima_pagina=\u00daltima p\u00e1gina
+valor_incorrecto=Valor incorrecto
+View_Tools_Query=
+Shows_Folders_in_gvSIG=Muestra directorios enlazados
+Bad_path=La ruta no existe
+Folder_formats=Enlazar con directorios
\ No newline at end of file
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ro.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ro.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ro.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [ro]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Accept\u0103
+Action=Ac\u0163iune
+Actions=Ac\u0163iuni
+Add_action=Adaug\u0103 ac\u0163iune
+Advanced_Hyperlink=Hyperlink avansat
+Campo=C\u00e2mp
+Cancel=Anulez
+Capa=Strat
+de=0\=de 0
+diez_paginas_atras=
+Enable_hyperlink=Activa\u021bi hiperleg\u0103tur\u0103
+Error\ reading\ layer\ fields=
+Extension=Extensie
+HTML_and_text_formats=Leg\u0103tur\u0103 c\u0103tre fi\u0219iere text \u0219i .html
+Hyperlink=Hiperleg\u0103tur\u0103
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Set\u0103ri hiperleg\u0103tur\u0103
+Image_format=Leg\u0103tur\u0103 c\u0103tre imagine
+imprimir=
+Load_Raster_Layer=\u00cenc\u0103rcare rastru
+Load_Vector_Layer=\u00cenc\u0103rcare vector
+Loads_raster_layers_in_gvSIG=\u00cencarc\u0103 strate rastru \u00een vederea curent\u0103
+Loads_vector_layers_in_gvSIG=\u00cencarc\u0103 strate vector \u00een vederea curent\u0103
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Leg\u0103tur\u0103 la fi\u0219iere .pdf
+pdf_viewer=
+primera_pagina=
+Remove_action=Elimin\u0103 ac\u021biune
+Shows_HTML_or_text_files_in_gvSIG=Arat\u0103 fi\u0219iere .html sau text \u00een gvSIG
+Shows_image_files_in_gvSIG=Arat\u0103 fi\u0219iere imagini \u00een gvSIG
+Shows_PDF_files_in_gvSIG=Arat\u0103 fi\u0219iere .pdf \u00een gvSIG
+Shows_SVG_files_in_gvSIG=Arat\u0103 fi\u0219iere .svg \u00een gvSIG
+SVG_format=Leg\u0103tur\u0103 la fi\u0219iere .svg
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_zh.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_zh.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_zh.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [zh]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=\u786e\u5b9a
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=\u5b57\u6bb5
+Cancel=\u53d6\u6d88
+Capa=\u56fe\u5c42
+de=
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_pt.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [pt]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Aceitar
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=Campo
+Cancel=Cancelar
+Capa=Capa
+de=of
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ca.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ca.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ca.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [ca]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Acceptar
+Action=Acci\u00f3
+Actions=Accions
+Add_action=Afegir acci\u00f3
+Advanced_Hyperlink=Hiperenlla\u00e7 avan\u00e7at
+Campo=Camp
+Cancel=Cancel\u00b7lar
+Capa=Capa
+de=de
+diez_paginas_atras=
+Enable_hyperlink=Activar hiperenlla\u00e7
+Error\ reading\ layer\ fields=
+Extension=Extensi\u00f3
+HTML_and_text_formats=Enlla\u00e7ar amb fitxers de text i HTML
+Hyperlink=Hiperenlla\u00e7
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Configurar hiperenlla\u00e7
+Image_format=Enlla\u00e7ar amb fitxers d'imatge
+imprimir=
+Load_Raster_Layer=Carregar capa r\u00e0ster
+Load_Vector_Layer=Carregar capa vectorial
+Loads_raster_layers_in_gvSIG=Carrega capes r\u00e0ster en la vista activa
+Loads_vector_layers_in_gvSIG=Carrega capes vectorials en la vista activa
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Enlla\u00e7ar amb fitxers PDF
+pdf_viewer=
+primera_pagina=
+Remove_action=Eliminar acci\u00f3
+Shows_HTML_or_text_files_in_gvSIG=Mostra fitxers HTML o de text en gvSIG
+Shows_image_files_in_gvSIG=Mostra imatges en gvSIG
+Shows_PDF_files_in_gvSIG=Mostra fitxers PDF en gvSIG
+Shows_SVG_files_in_gvSIG=Mostra fitxers SVG en gvSI
+SVG_format=Enlla\u00e7ar amb fitxers SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sr.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sr.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sr.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [sr]
+#Mon Nov 02 08:36:02 CET 2009
+10_paginas_delante=
+Aceptar=Prihvati
+Action=Aktivnost
+Actions=Aktivnosti
+Add_action=Dodaj aktivnost
+Advanced_Hyperlink=Napredni Hyperlink
+Campo=Polje
+Cancel=Odustani
+Capa=Lejer
+de=od
+diez_paginas_atras=
+Enable_hyperlink=Aktivirati hyperlink
+Error\ reading\ layer\ fields=
+Extension=Ekstenzija
+HTML_and_text_formats=Pove\u017ei sa datotekama teksta i HTML
+Hyperlink=Hyperlink
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Konfiguracija hyperlink-a
+Image_format=Pove\u017ei sa datotekama slika
+imprimir=
+Load_Raster_Layer=U\u010ditaj raster lejer
+Load_Vector_Layer=U\u010ditaj vektorski lejer
+Loads_raster_layers_in_gvSIG=U\u010ditavanje raster lejera u aktivnom prikazu
+Loads_vector_layers_in_gvSIG=U\u010ditavanje vektorskih lejera u aktivnom prikazu
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Povezivanje sa PDF datotekama 
+pdf_viewer=
+primera_pagina=
+Remove_action=Ukloni akciju
+Shows_HTML_or_text_files_in_gvSIG=Prika\u017ei HTML datoteke ili tekstualne datoteke u gvSIG
+Shows_image_files_in_gvSIG=Prikazuje slike u gvSIG-u
+Shows_PDF_files_in_gvSIG=Prikazuje PDF datoteke u gvSIG-u
+Shows_SVG_files_in_gvSIG=Prikazuje SVG datoteke u gvSIG-u
+SVG_format=Pove\u017ei sa datotekama SVG
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_tr.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_tr.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_tr.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [tr]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Kabul et
+Action=Eylem
+Actions=Eylemler
+Add_action=Eylem ekle
+Advanced_Hyperlink=Geli\u015fmi\u015f Ba\u011f
+Campo=Alan
+Cancel=\u0130ptal
+Capa=Katman
+de=
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=Eklenti
+HTML_and_text_formats=
+Hyperlink=Ba\u011f
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Ba\u011f ayarlar\u0131
+Image_format=G\u00f6r\u00fcnt\u00fc dosyalar\u0131na ba\u011f
+imprimir=
+Load_Raster_Layer=Raster katman\u0131 y\u00fckle
+Load_Vector_Layer=Vekt\u00f6r katman\u0131 y\u00fckle
+Loads_raster_layers_in_gvSIG=Aktif penceredeki raster katmanlar\u0131 y\u00fckler
+Loads_vector_layers_in_gvSIG=Aktif penceredeki vekt\u00f6r katmanlar\u0131 y\u00fckler
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=PDf dosyalar\u0131na ba\u011f
+pdf_viewer=
+primera_pagina=
+Remove_action=Eylemi kald\u0131r
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=gvSIG de g\u00f6r\u00fcnt\u00fc dosyalar\u0131n\u0131 g\u00f6sterir
+Shows_PDF_files_in_gvSIG=gvSIG de PDF dosyalar\u0131n\u0131 g\u00f6sterir
+Shows_SVG_files_in_gvSIG=gvSIG de SVG dosyalar\u0131n\u0131 g\u00f6sterir
+SVG_format=SVG dosyalar\u0131na ba\u011f
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ru.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ru.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_ru.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [ru]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=\u041e\u041a
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=\u041f\u043e\u043b\u0435
+Cancel=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+Capa=\u0421\u043b\u043e\u0439
+de=\u0438\u0437
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_de.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_de.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_de.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [de]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=10 Seiten vor
+Aceptar=OK
+Action=Verbindung
+Actions=Eigenschaften
+Add_action=Link hinzuf\u00fcgen
+Advanced_Hyperlink=Erweiterung Hyperlink
+Campo=Feld
+Cancel=Abbrechen
+Capa=Layer
+de=von
+diez_paginas_atras=
+Enable_hyperlink=Hyperlink an
+Error\ reading\ layer\ fields=
+Extension=Erweiterung
+HTML_and_text_formats=Link zu Text und html
+Hyperlink=Hyperlink
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=Einstellungen Hyperlink
+Image_format=Link zu Bildern
+imprimir=
+Load_Raster_Layer=Raster-Layer
+Load_Vector_Layer=Vektor-Layer
+Loads_raster_layers_in_gvSIG=Raster-Layer werden in der aktiven Ansicht geladen
+Loads_vector_layers_in_gvSIG=Vektor-Layer werden in der aktiven Ansicht geladen
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=Link zu pdf
+pdf_viewer=
+primera_pagina=
+Remove_action=Link entfernen
+Shows_HTML_or_text_files_in_gvSIG=Zeigt HTML- oder Text-Dateien in gvSIG an
+Shows_image_files_in_gvSIG=Bild-Dateien in gvSIG anzeigen
+Shows_PDF_files_in_gvSIG=PDF- Dateien in gvSIG anzeigen
+Shows_SVG_files_in_gvSIG=SVG-Dateien in gvSIG anzeigen
+SVG_format=Link zu svg
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sw.properties
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sw.properties	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/i18n/text_sw.properties	(revision 798)
@@ -0,0 +1,42 @@
+#Translations for language [sw]
+#Mon Sep 21 10:02:06 CEST 2009
+10_paginas_delante=
+Aceptar=Idhinisha
+Action=
+Actions=
+Add_action=
+Advanced_Hyperlink=
+Campo=Safu/Eneo lililowazi
+Cancel=Futa
+Capa=Safu/Tabata
+de=ya
+diez_paginas_atras=
+Enable_hyperlink=
+Error\ reading\ layer\ fields=
+Extension=
+HTML_and_text_formats=
+Hyperlink=
+Hyperlink__field_value_is_not_valid_file=
+Hyperlink_linked_field_doesnot_exist=
+Hyperlink_Settings=
+Image_format=
+imprimir=
+Load_Raster_Layer=
+Load_Vector_Layer=
+Loads_raster_layers_in_gvSIG=
+Loads_vector_layers_in_gvSIG=
+Pagina=
+pagina_atras=
+pagina_delante=
+PDF_format=
+pdf_viewer=
+primera_pagina=
+Remove_action=
+Shows_HTML_or_text_files_in_gvSIG=
+Shows_image_files_in_gvSIG=
+Shows_PDF_files_in_gvSIG=
+Shows_SVG_files_in_gvSIG=
+SVG_format=
+ultima_pagina=
+valor_incorrecto=
+View_Tools_Query=
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/config.xml
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/config.xml	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/config.xml	(revision 798)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<depends plugin-name="org.gvsig.app.mainplugin" />
+	<resourceBundle name="text"/>
+	<libraries library-dir="lib"/>
+	<extensions>
+		<extension class-name="org.gvsig.hyperlink.app.extension.HyperlinkExtension"
+			description=""
+			active="true"
+			priority="20">
+
+			<action
+        		name= "view-show-hyperlink"
+        		label="Hyperlink"
+        		tooltip="Hyperlink"
+        		action-command="view-show-hyperlink"
+        		icon="view-show-hyperlink"
+        		position="650700400"
+        		/>
+
+			<menu text="Layer/Query/Hyperlink" name="view-show-hyperlink" />
+
+     		<tool-bar name="view_tools_query" position="5">
+				<selectable-tool name="view-show-hyperlink" />
+			</tool-bar>
+		</extension>
+	</extensions>
+</plugin-config>
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/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: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/toolbar-go/go-next.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

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

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

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

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

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

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/forward.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/forward.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/end.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/end.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/fback.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/fback.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/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: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/action/document-print.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/action/view-show-hyperlink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/action/view-show-hyperlink.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/cursor/cursor-view-show-hyperlink.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/cursor/cursor-view-show-hyperlink.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/fforward.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/fforward.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/LinkCursor.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/LinkCursor.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/Link.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/Link.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/print.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/print.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/start.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/start.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/back.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/resources-plugin/images/back.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/assembly/gvsig-plugin-package.xml
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/assembly/gvsig-plugin-package.xml	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/assembly/gvsig-plugin-package.xml	(revision 798)
@@ -0,0 +1,44 @@
+<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>
+
+<!-- org.gvsig.app.mainplugin provides these libraries
+  <dependencySets>
+  
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+            <include>org.jpedal:jpedal_lgpl</include>
+            <include>com.sun:jimi</include>
+            <include>org.apache.xmlgraphics:batik-gvt</include>
+            <include>org.apache.xmlgraphics:batik-bridge</include>
+            <include>org.apache.xmlgraphics:batik-script</include>
+            <include>xml-apis:xml-apis-ext</include>
+      </includes>
+    </dependencySet>
+  </dependencySets>
+-->
+
+</assembly>
\ No newline at end of file
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractHyperLinkPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractHyperLinkPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractHyperLinkPanel.java	(revision 798)
@@ -0,0 +1,103 @@
+/* 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.hyperlink.app.extension;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.logging.Level;
+
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class extends JPanel and implements IExtensioBuilder. Provides the
+ * methods that will be reimplemented by the descendant class. Creates a panel
+ * that shows the content of a URI. The necessary code that allows to show the
+ * content of the URI is provided by the descendant class. Implmenting
+ * IExtenssionBuilder this class and its the descendant provides a point of
+ * extension for other extensions.
+ */
+public abstract class AbstractHyperLinkPanel extends JPanel {
+
+    protected static final Logger logger = LoggerFactory.getLogger(AbstractHyperLinkPanel.class);
+    
+    protected LinkTarget document;
+
+    public AbstractHyperLinkPanel(LinkTarget linkTarget) {
+        super();
+        document = linkTarget;
+    }
+
+    public LinkTarget getLinkTarget() {
+        return document;
+    }
+
+    /**
+     * Tries to make an absolute url from a relative one,
+     * and returns true if the URL is valid.
+     * false otherwise
+     * 
+     * @return
+     */
+    protected boolean checkAndNormalizeURI() {
+        if (document == null) {
+            PluginServices.getLogger().warn(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"));
+            return false;
+        } else if (document.getURL()!=null) {
+            try {
+                if (!document.getURL().toURI().isAbsolute()) {
+                    try {
+                        // try as a relative path
+                        File file =
+                                new File(document.toString()).getCanonicalFile();
+                        if (!file.exists()) {
+                            PluginServices.getLogger()
+                                    .warn(PluginServices.getText(this,
+                                            "Hyperlink_linked_field_doesnot_exist"));
+                            return false;
+                        }
+                        document.setURL(file.toURI().toURL());
+                        return true;
+                    } catch (IOException e) {
+                        PluginServices.getLogger()
+                                .warn(PluginServices.getText(this,
+                                        "Hyperlink_linked_field_doesnot_exist"));
+                        return false;
+                    }
+                }
+        } catch (URISyntaxException ex) {
+            NotificationManager.addWarning(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"), ex);
+            return false; 
+        }
+        }
+        return true;
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/DefaultLinkTarget.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/DefaultLinkTarget.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/DefaultLinkTarget.java	(revision 798)
@@ -0,0 +1,200 @@
+/*
+ * 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.hyperlink.app.extension;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+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.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+/**
+ *
+ * @author osc
+ */
+public class DefaultLinkTarget implements LinkTarget {
+
+    private URL url;
+    private final String fieldExtension;
+    private final FLyrVect _layer;
+    private final String fieldName;
+    private Object content;
+    private String profileName;
+
+
+    public DefaultLinkTarget(FLyrVect layer,Feature feature, String fieldName, String fieldExtension) {
+        this.fieldName = fieldName;
+        this.fieldExtension = fieldExtension;
+        this._layer = layer;
+        this.url = null;
+        Object val = feature.get(fieldName);
+        String fieldValue = (val == null) ? "" : val.toString();
+        if (!fieldValue.equals("")) {
+            try {
+                URI uri = this.getURI(fieldValue, fieldExtension);
+                if (uri != null) {
+                    this.url = uri.toURL();
+                } else {
+                    this.url = null;
+                }
+
+            } catch (URISyntaxException ex) {
+                Logger.getLogger(DefaultLinkTarget.class.getName()).log(Level.SEVERE, null, ex);
+                this.url = null;
+            } catch (MalformedURLException ex) {
+                Logger.getLogger(DefaultLinkTarget.class.getName()).log(Level.SEVERE, null, ex);
+                this.url = null;
+            }
+            if (this.url == null) {
+                FeatureAttributeDescriptor fad;
+
+                try {
+                    this.content = feature.getFromProfile(fieldName);
+                    fad = feature.getStore().getDefaultFeatureType().getAttributeDescriptor(fieldName);
+                } catch (DataException ex) {
+                    fad = null;
+                    Logger.getLogger(DefaultLinkTarget.class.getName()).log(Level.SEVERE, null, ex);
+                }
+                if (fad != null) {
+                    this.profileName = fad.getDataProfileName();
+                } else {
+                    this.profileName = null;
+                }
+
+            }
+        }
+        
+
+    }
+    protected URI getBasicURI(String baseURI, String extension) throws URISyntaxException {
+        String pathname;
+        if( StringUtils.isEmpty(extension) ) {
+            pathname = baseURI;
+        } else {
+            if (extension.startsWith(".")) {
+                pathname = baseURI + extension;
+            } else {
+                pathname = baseURI + "." + extension;
+            }
+        }
+        pathname = pathname.replace("\\","//");
+        if( this._layer.getFeatureStore().getParameters() instanceof FilesystemStoreParameters ) {
+            FilesystemStoreParameters params = (FilesystemStoreParameters) this._layer.getFeatureStore().getParameters();
+            File f = params.getFile();
+            URLClassLoader loader = new URLClassLoader(new URL[] {toURL(f)});
+            URL url = loader.getResource(pathname);
+            if( url != null ) {
+                return url.toURI();
+            }
+            url = loader.getResource("/" + pathname);
+            if( url != null ) {
+                return url.toURI();
+            }
+            File ff = FileUtils.getFile(f.getParentFile(), pathname);
+            if( ff.exists() ) {
+                return ff.toURI();
+            }
+        }
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        Project project = projectManager.getCurrentProject();
+        if( project.getFile()!=null ) {
+            File ff = FileUtils.getFile(project.getFile().getParentFile(), pathname);
+            if( ff.exists() ) {
+                return ff.toURI();
+            }
+        }
+        File ff = new File(pathname);
+        if( ff.exists() ) {
+            return ff.toURI();
+        }
+        return null;
+    }
+    
+     protected URI getURI(String baseURI, String extension) throws URISyntaxException {
+        if( StringUtils.isEmpty(baseURI) ) {
+            return null;
+        }
+        URI uri = getBasicURI(baseURI, extension);
+        if( uri!=null ) {
+            return uri;
+        }
+        String value = baseURI.trim();
+
+        Pattern pattern = Pattern.compile(".*<img[^>]*src=\"([^\"]*)\".*",  Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL);
+        Matcher m = pattern.matcher(value);
+        if( m!=null && m.matches() ) {
+            String x = m.group(1);
+            if( !StringUtils.isEmpty(x) ) {
+                uri = getBasicURI(x, extension);
+                if( uri!=null ) {
+                    return uri;
+                }
+            }
+        }
+        pattern = Pattern.compile(".*<a[^>]*href=\"([^\"]*)\".*", Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL);
+        m = pattern.matcher(value);
+        if( m!=null && m.matches() ) {
+            String x = m.group(1);
+            if( !StringUtils.isEmpty(x) ) {
+                uri = getBasicURI(x, extension);
+                if( uri!=null ) {
+                    return uri;
+                }
+            }
+        }
+        try {
+            URI createURI = new URI(baseURI);
+            return createURI;
+        } catch (Exception e) {
+            //throw new URISyntaxException(baseURI, "Can't make a valid URI.");
+            return null;
+        }
+    }
+     
+    private URL toURL(File f) {
+        try {
+            return f.toURI().toURL();
+        } catch (MalformedURLException ex) {
+            return null;
+        }
+    }
+    
+    @Override
+    public URL getURL() {
+        return this.url;
+    }
+
+    @Override
+    public Object getFromProfile() {
+        return this.content;
+ }
+
+    @Override
+    public String getProfileName() {
+        return this.profileName;
+    }
+
+    @Override
+    public void setURL(URL url) {
+        this.url = url;
+    }
+    
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractActionManager.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractActionManager.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/AbstractActionManager.java	(revision 798)
@@ -0,0 +1,45 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension;
+
+import java.util.Map;
+
+public abstract class AbstractActionManager implements ILinkActionManager {
+
+    public boolean hasPanel() {
+        return false;
+    }
+
+    public Object create() {
+        return this;
+    }
+
+    public Object create(Object[] args) {
+        return this;
+    }
+
+    public Object create(Map args) {
+        return this;
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ILinkActionManager.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ILinkActionManager.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ILinkActionManager.java	(revision 798)
@@ -0,0 +1,55 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension;
+
+import java.net.URI;
+
+import org.gvsig.tools.extensionpoint.ExtensionBuilder;
+
+/**
+ * TODO document this interface
+ * This interface must be implemented by format managers for the
+ * hyperlink tool. A manager is able to load an specific file, either
+ * by loading it in an AbstractHyperLinkPanel or by opening the proper
+ * program to do the task.
+ * 
+ * Format managers must be registered in the ExtensionPoint named
+ * "HyperLinkAction" in order to be available in the HyperLink tool.
+ * 
+ * @author cesar
+ * 
+ */
+public interface ILinkActionManager extends ExtensionBuilder {
+
+    public void showDocument(LinkTarget doc) throws UnsupportedOperationException;
+
+    public boolean hasPanel();
+
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException;
+
+    public String getActionCode();
+
+    public String getName();
+
+    public String getDescription();
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/IncompatibleLayerException.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/IncompatibleLayerException.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/IncompatibleLayerException.java	(revision 798)
@@ -0,0 +1,31 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.layers;
+
+public class IncompatibleLayerException extends Exception {
+
+    public IncompatibleLayerException(Throwable ex) {
+        super(ex);
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ManagerRegistry.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ManagerRegistry.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ManagerRegistry.java	(revision 798)
@@ -0,0 +1,150 @@
+/* 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.hyperlink.app.extension.layers;
+
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+
+public class ManagerRegistry {
+
+    public static final String EXTENSIONPOINTNAME = "hyperlink.layer.manager";
+    private ExtensionPoint extensionPoint;
+    /**
+     * We will cache the proper manager for each class, so that we don't
+     * calculate the right one everytime.
+     * This assumes that no manager will be added after extensions' initialize()
+     * method, otherwise the
+     * cached values will be incorrect.
+     */
+    private HashMap<Class, String> cachedManagers;
+    /**
+     * We will also cache the unmanaged layers (layers without managers).
+     */
+    private HashSet<Class> cachedUnmanagedLayers;
+
+    public ManagerRegistry() {
+        ExtensionPointManager epm = ToolsLocator.getExtensionPointManager();
+        extensionPoint =
+            epm.add(EXTENSIONPOINTNAME,
+                "Registers ILinkToolManagers that are able to manage specific layer types.");
+        cachedManagers = new HashMap<Class, String>();
+        /*
+         * Add vector layer
+         * If we don't, persisted layers will not work well
+         */
+        cachedManagers.put(FLyrVect.class, FLyrVect.class.getName());
+
+        cachedUnmanagedLayers = new HashSet<Class>();
+    }
+
+    public void put(Class layerType, Class manager) {
+        if (layerType.isInterface()) {
+            throw new RuntimeException("Interfaces are not supported");
+        }
+        if (!ILinkLayerManager.class.isAssignableFrom(manager)) {
+            throw new RuntimeException("Managers must be of type ILinkLayerManager");
+        }
+        extensionPoint.append(layerType.getName(), "", manager);
+    }
+
+    public ILinkLayerManager get(FLayer layer) throws ClassNotFoundException,
+        InstantiationException,
+        IllegalAccessException,
+        IncompatibleLayerException {
+        if (cachedManagers.containsKey(layer.getClass())) {
+            String layerType = cachedManagers.get(layer.getClass());
+            ILinkLayerManager manager =
+                (ILinkLayerManager) extensionPoint.create(layerType);
+            manager.setLayer(layer);
+            return manager;
+        } else
+            if (cachedUnmanagedLayers.contains(layer.getClass())) {
+                return null;
+            }
+        // search for proper manager for this class
+        Iterator it = extensionPoint.getNames().iterator();
+        TreeSet<Class> classList = new TreeSet<Class>(new ClassComparator());
+        while (it.hasNext()) {
+            String layerType = it.next().toString();
+            Class layerClass = Class.forName(layerType);
+            if (layerClass.isInstance(layer)) {
+                classList.add(layerClass);
+            }
+        }
+
+        if (!classList.isEmpty()) {
+            ILinkLayerManager manager =
+                (ILinkLayerManager) extensionPoint.create(classList.first()
+                    .getName());
+            cachedManagers.put(layer.getClass(), classList.first().getName());
+            manager.setLayer(layer);
+            return manager;
+        } else {
+            cachedUnmanagedLayers.add(layer.getClass());
+            return null;
+        }
+    }
+
+    public boolean hasManager(FLayer layer) {
+        if (cachedManagers.containsKey(layer.getClass())) {
+            return true;
+        } else
+            if (cachedUnmanagedLayers.contains(layer.getClass())) {
+                return false;
+            }
+
+        Iterator it = extensionPoint.iterator();
+        while (it.hasNext()) {
+            Class layerClass = ((Extension) it.next()).getExtension();
+            if (layerClass.isInstance(layer)) {
+                return true;
+            }
+        }
+
+//        cachedUnmanagedLayers.add(layer.getClass());
+        return false;
+    }
+
+    private class ClassComparator implements Comparator<Class> {
+
+        public int compare(Class class1, Class class2) {
+            if (class1.equals(class2))
+                return 0;
+            if (class1.isAssignableFrom(class2)) {
+                return 1;
+            } else {
+                return -1;
+            }
+        }
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/VectLayerManager.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/VectLayerManager.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/VectLayerManager.java	(revision 798)
@@ -0,0 +1,274 @@
+/* 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.hyperlink.app.extension.layers;
+
+import java.awt.geom.Point2D;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.project.Project;
+import org.gvsig.app.project.ProjectManager;
+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.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureType;
+import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemStoreParameters;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.hyperlink.app.extension.DefaultLinkTarget;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+import org.gvsig.tools.dispose.DisposableIterator;
+
+public class VectLayerManager implements ILinkLayerManager {
+
+    private FLyrVect _layer = null;
+
+    @Override
+    public LinkTarget[] getLink(Point2D point,
+        double tolerance,
+        String fieldName,
+        String fileExtension) {
+        FLyrVect lyrVect = (FLyrVect) _layer;
+        //ArrayList<LinkTarget> uriList = new ArrayList();
+        List<LinkTarget> uriList = new ArrayList();
+        FeatureSet features;
+        FeatureType featureType;
+
+        try {
+            // FIXME: Habrá que ver como lo hacemos con las capas multigeometría
+            featureType = _layer.getFeatureStore().getDefaultFeatureType();
+            features = lyrVect.queryByPoint(point, tolerance, featureType);
+        } catch (DataException e) {
+            return null;
+        }
+
+        // Si el conjunto creado no está vacío creamos el vector de URLS
+        // correspondientes
+        // a la consulta que hemos hecho.
+
+        if (features != null) {
+            try {
+                DisposableIterator it;
+                it = features.fastIterator();
+                Object val = null;
+
+                while (it.hasNext()) {
+                    Feature feature = (Feature) it.next();
+
+                            DefaultLinkTarget target = new DefaultLinkTarget(_layer, feature, fieldName, fileExtension);
+                            uriList.add(target); //getURI(fieldValue, fileExtension));
+                    }
+                it.dispose();
+                return uriList.toArray(new LinkTarget[0]);//(LinkTarget[]) uriList.toArray(); //(URI[]) uriList.toArray(new URI[0]);
+            } catch (DataException e1) {
+                PluginServices.getLogger()
+                    .error("Hyperlink__cant_get_the_iterator", e1);
+            }
+        }
+        return null; //new URI[0];
+    }
+
+    private URL toURL(File f) {
+        try {
+            return f.toURI().toURL();
+        } catch (MalformedURLException ex) {
+            return null;
+        }
+    }
+    
+    protected URI getBasicURI(String baseURI, String extension) throws URISyntaxException {
+        String pathname;
+        if( StringUtils.isEmpty(extension) ) {
+            pathname = baseURI;
+        } else {
+            if (extension.startsWith(".")) {
+                pathname = baseURI + extension;
+            } else {
+                pathname = baseURI + "." + extension;
+            }
+        }
+        pathname = pathname.replace("\\","//");
+        if( this._layer.getFeatureStore().getParameters() instanceof FilesystemStoreParameters ) {
+            FilesystemStoreParameters params = (FilesystemStoreParameters) this._layer.getFeatureStore().getParameters();
+            File f = params.getFile();
+            URLClassLoader loader = new URLClassLoader(new URL[] {toURL(f)});
+            URL url = loader.getResource(pathname);
+            if( url != null ) {
+                return url.toURI();
+            }
+            url = loader.getResource("/" + pathname);
+            if( url != null ) {
+                return url.toURI();
+            }
+            File ff = FileUtils.getFile(f.getParentFile(), pathname);
+            if( ff.exists() ) {
+                return ff.toURI();
+            }
+        }
+        ProjectManager projectManager = ApplicationLocator.getProjectManager();
+        Project project = projectManager.getCurrentProject();
+        if( project.getFile()!=null ) {
+            File ff = FileUtils.getFile(project.getFile().getParentFile(), pathname);
+            if( ff.exists() ) {
+                return ff.toURI();
+            }
+        }
+        File ff = new File(pathname);
+        if( ff.exists() ) {
+            return ff.toURI();
+        }
+        return null;
+    }
+    
+
+    @Override
+    public FLayer getLayer() {
+        return _layer;
+    }
+
+    @Override
+    public void setLayer(FLayer layer) throws IncompatibleLayerException {
+        try {
+            _layer = (FLyrVect) layer;
+        } catch (ClassCastException ex) {
+            throw new IncompatibleLayerException(ex);
+        }
+    }
+
+    public Object create() {
+        return this;
+    }
+
+    public Object create(Object[] args) {
+        return this;
+    }
+
+    public Object create(Map args) {
+        return this;
+    }
+
+//    public URI[][] getLink(Point2D point,
+//        double tolerance,
+//        String[] fieldName,
+//        String fileExtension) {
+//        FLyrVect lyrVect = (FLyrVect) _layer;
+//        FeatureSet features;
+//        FeatureType featureType;
+//        URI uri[][] = null;
+//
+//        try {
+//            // FIXME: Habrá que ver como lo hacemos con las capas multigeometría
+//            featureType = _layer.getFeatureStore().getDefaultFeatureType();
+//            features = lyrVect.queryByPoint(point, tolerance, featureType);
+//        } catch (Exception e) {
+//            return null;
+//        }
+//
+//        // Si el conjunto creado no está vacío creamos el vector de URLS
+//        // correspondientes
+//        // a la consulta que hemos hecho.
+//
+//        if (features != null) {
+//            try {
+//                // Creo el vector de URL´s con la misma longitud que features
+//                uri = new URI[(int) features.getSize()][fieldName.length];
+//
+//                // Recorremos las features siguiendo el ejemplo de la clase que
+//                // se
+//                // proporciona en la API
+//                int count = 0;
+//                DisposableIterator it = features.fastIterator();
+//                while (it.hasNext()) {
+//                    Feature feat = (Feature) it.next();
+//                    for (int fieldCount = 0; fieldCount < fieldName.length; fieldCount++) {
+//                        // get the field ID using the field name
+//                        String auxField =
+//                            feat.get(fieldName[fieldCount]).toString();
+//                        if (auxField != null) {
+//                            if (auxField.startsWith("http:/")) {
+//                                try {
+//                                    uri[count][fieldCount] = new URI(auxField);
+//                                } catch (URISyntaxException e) {
+//                                    PluginServices.getLogger().error("", e);
+//                                }
+//                            } else {
+//                                File file = new File(auxField);
+//                                uri[count][fieldCount] = file.toURI();
+//                            }
+//                        } else {
+//                            PluginServices.getLogger()
+//                                .error("Hyperlink error. Field "
+//                                    + fieldName[fieldCount] + "doesn't exist!!");
+//                            uri[count][fieldCount] = null;
+//                        }
+//                    }
+//                    count++;
+//                }
+//                it.dispose();
+//
+//                return uri;
+//            } catch (DataException e) {
+//                PluginServices.getLogger().error("", e);
+//            }
+//        }
+//        return new URI[0][0];
+//    }
+
+    @Override
+    public String[] getFieldCandidates() {
+        try {
+            FeatureType featureType =
+                _layer.getFeatureStore().getDefaultFeatureType();
+            ArrayList<String> fields = new ArrayList<String>();
+            FeatureAttributeDescriptor[] descriptors =
+                featureType.getAttributeDescriptors();
+            for (int i = 0; i < descriptors.length; i++) {
+                FeatureAttributeDescriptor descriptor = descriptors[i];
+                if (  !(descriptor.getDataType().isObject() || 
+                    descriptor.getDataType().getType() == DataTypes.GEOMETRY) ) {
+                    fields.add(descriptor.getName());
+                }
+            }
+            return (String[]) fields.toArray(new String[0]);
+        } catch (DataException e) {
+            NotificationManager.addError(PluginServices.getText(this,
+                "Error_reading_layer_fields"), e);
+        }
+        return new String[0];
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ILinkLayerManager.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ILinkLayerManager.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/layers/ILinkLayerManager.java	(revision 798)
@@ -0,0 +1,46 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.layers;
+
+import java.awt.geom.Point2D;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public interface ILinkLayerManager {
+
+    public void setLayer(FLayer layer) throws IncompatibleLayerException;
+
+    public FLayer getLayer();
+
+    public LinkTarget[] getLink(Point2D point,
+        double tolerance,
+        String fieldName,
+        String fileExtension);
+
+//    public URI[][] getLink(Point2D point,
+//        double tolerance,
+//        String[] fieldName,
+//        String fileExtension);
+
+    public String[] getFieldCandidates();
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkConfigExtension.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkConfigExtension.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkConfigExtension.java	(revision 798)
@@ -0,0 +1,137 @@
+/* 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.hyperlink.app.extension;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.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.hyperlink.app.extension.config.gui.ConfigTab;
+import org.gvsig.hyperlink.app.extension.layers.ManagerRegistry;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Extensión para gestionar los hiperlinks.
+ * 
+ * @author Vicente Caballero Navarro
+ */
+public class LinkConfigExtension extends Extension {
+
+    private static final Logger logger =
+        LoggerFactory.getLogger(LinkConfigExtension.class);
+    ManagerRegistry layerManager;
+
+    /**
+     * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+        logger.debug("Command : " + s);
+
+        if (s.compareTo("LINK_SETTINGS") == 0) {
+            IView view =
+                (IView) PluginServices.getMDIManager().getActiveWindow();
+            HyperlinkExtension ext =
+                (HyperlinkExtension) PluginServices.getExtension(HyperlinkExtension.class);
+            // init tool and load legacy config in case it has been not done
+            ext.initTool(view);
+            FLayer[] activas =
+                view.getMapControl().getMapContext().getLayers().getActives();
+            for (int i = 0; i < activas.length; i++) {
+                if (!activas[i].isAvailable()) {
+                    return;
+                }
+
+                if (layerManager.hasManager(activas[i])) {
+                    ConfigTab configWindow = new ConfigTab();
+                    configWindow.setModel(activas[i]);
+                    PluginServices.getMDIManager()
+                        .addCentredWindow(configWindow);
+                }
+            }
+
+        }
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+
+        if (window == null) {
+            return false;
+        }
+
+        if (window instanceof IView) {
+
+            MapContext mapa =
+                ((IView) window).getViewDocument().getMapContext();
+
+            return mapa.getLayers().getLayersCount() > 0;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @see com.iver.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        // it will be enabled when there is only ONE active layer, and this
+        // layer
+        // is available and has a valid ILayerLinkManager
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+
+        if (window == null) {
+            return false;
+        }
+
+        if (window instanceof IView) {
+            IView view = (IView) window;
+            ViewDocument model = view.getViewDocument();
+            FLayer[] activas = model.getMapContext().getLayers().getActives();
+            if (activas.length == 1) {
+                if (activas[0].isAvailable()
+                    && layerManager.hasManager(activas[0])) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    public void postInitialize() {
+        HyperlinkExtension ext =
+            (HyperlinkExtension) PluginServices.getExtension(HyperlinkExtension.class);
+        layerManager = ext.getLayerManager();
+    }
+
+    public void initialize() {
+        //Do nothing
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ShowPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ShowPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/ShowPanel.java	(revision 798)
@@ -0,0 +1,210 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension;
+
+import java.awt.BorderLayout;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+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.toolListeners.InfoListener;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class extends JPanel. This class implements a Panel to show the content
+ * of the URI
+ * that the constructor of the class receives. This panel invokes a new one with
+ * the content
+ * of the URI. The type of the supported URI should be added like extension
+ * point in the
+ * initialization of the extension.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author Eustaquio Vercher
+ * 
+ */
+public class ShowPanel extends JPanel implements IWindow, ComponentListener {
+
+    private static org.slf4j.Logger logger = LoggerFactory.getLogger(ShowPanel.class);
+    private JScrollPane jScrollPane = null;
+    private WindowInfo m_ViewInfo = null;
+    private AbstractHyperLinkPanel contents = null;
+    private static int xpos = 0;
+    private static int ypos = 0;
+
+    public ShowPanel(AbstractHyperLinkPanel contents) {
+        super();
+        this.contents = contents;
+        initialize();
+    }
+
+    /**
+     * This method initializes this
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
+        getJScrollPane().setViewportView(contents);
+    }
+
+    /**
+     * Returns a Scroll Pane with the content of the HyperLink
+     * 
+     * @return jScrollPane
+     */
+    private JScrollPane getJScrollPane() {
+        if (jScrollPane == null) {
+            jScrollPane = new JScrollPane();
+            // jScrollPane.setPreferredSize(new java.awt.Dimension(300, 400));
+        }
+        return jScrollPane;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see com.iver.andami.ui.mdiManager.IWindow#getWindowInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        if (m_ViewInfo == null) {
+            m_ViewInfo
+                    = new WindowInfo(WindowInfo.RESIZABLE | WindowInfo.MAXIMIZABLE
+                            | WindowInfo.ICONIFIABLE | WindowInfo.PALETTE);
+            URL urlContent = contents.getLinkTarget().getURL();
+            if (urlContent != null) {
+                URI uriContent = null;
+                try {
+                    uriContent = urlContent.toURI();
+                } catch (URISyntaxException ex) {
+                    logger.warn("Not able to convert to URI:" + urlContent.toString());
+                }
+
+                if (uriContent != null) {
+                    if (uriContent.toString().startsWith("file:")
+                            && uriContent.isAbsolute()) {
+                        try {
+                            File file = new File(uriContent.toURL().getFile());
+                            m_ViewInfo.setTitle(PluginServices.getText(this,
+                                    "Hyperlink") + " - " + file.getName());
+                        } catch (MalformedURLException e) {
+                            m_ViewInfo.setTitle(PluginServices.getText(this,
+                                    "Hyperlink") + " - " + uriContent.toString());
+                        } catch (NullPointerException e) {
+                            m_ViewInfo.setTitle(PluginServices.getText(this,
+                                    "Hyperlink") + " - " + uriContent.toString());
+                        }
+                    } else {
+                        m_ViewInfo.setTitle(PluginServices.getText(this, "Hyperlink")
+                                + " - " + uriContent.toString());
+                    }
+                }
+            } else {
+                m_ViewInfo.setTitle(PluginServices.getText(this, "Hyperlink"));
+            }
+        }
+
+        int height = (int) contents.getPreferredSize().getHeight() + 15;
+        if (height > 650) {
+            height = 650;
+        } else if (height < 450) {
+            height = 450;
+        }
+        int width = (int) contents.getPreferredSize().getWidth() + 20;
+        if (width > 800) {
+            width = 800;
+        } else if (width < 450) {
+            width = 450;
+        }
+        m_ViewInfo.setWidth(width);
+        m_ViewInfo.setHeight(height);
+        m_ViewInfo.setX(xpos);
+        xpos = (xpos + 20) % 270;
+        m_ViewInfo.setY(ypos);
+        ypos = (ypos + 15) % 150;
+
+        return m_ViewInfo;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.event.ComponentListener#componentResized(java.awt.event.
+     * ComponentEvent)
+     */
+    @Override
+    public void componentResized(ComponentEvent e) {
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * java.awt.event.ComponentListener#componentMoved(java.awt.event.ComponentEvent
+     * )
+     */
+    @Override
+    public void componentMoved(ComponentEvent e) {
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * java.awt.event.ComponentListener#componentShown(java.awt.event.ComponentEvent
+     * )
+     */
+    @Override
+    public void componentShown(ComponentEvent e) {
+
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.awt.event.ComponentListener#componentHidden(java.awt.event.
+     * ComponentEvent)
+     */
+    @Override
+    public void componentHidden(ComponentEvent e) {
+
+    }
+
+    @Override
+    public Object getWindowProfile() {
+        return WindowInfo.EDITOR_PROFILE;
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfFormat.java	(revision 798)
@@ -0,0 +1,66 @@
+/* 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.hyperlink.app.extension.actions;
+
+import java.io.Serializable;
+import java.net.URI;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public class PdfFormat extends AbstractActionManager implements Serializable {
+
+    public static final String actionCode = "PDF_format";
+
+    @Override
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException {
+        return new PdfHyperlinkPanel(doc);
+    }
+
+    @Override
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    @Override
+    public boolean hasPanel() {
+        return true;
+    }
+
+    @Override
+    public void showDocument(LinkTarget doc) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_PDF_files_in_gvSIG");
+    }
+
+    @Override
+    public String getName() {
+        return PluginServices.getText(this, "PDF_format");
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/DesktopApi.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/DesktopApi.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/DesktopApi.java	(revision 798)
@@ -0,0 +1,270 @@
+package org.gvsig.hyperlink.app.extension.actions;
+
+/*
+ * 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.URL;
+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(URL 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(URL 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.toURI());
+
+            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: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/FolderFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/FolderFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/FolderFormat.java	(revision 798)
@@ -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.hyperlink.app.extension.actions;
+
+import java.awt.Desktop;
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.URI;
+import javax.swing.JOptionPane;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FolderFormat extends AbstractActionManager implements Serializable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 1L;
+    public static final String actionCode = "Folder_format";
+    private static Logger logger = LoggerFactory.getLogger(FolderFormat.class);
+
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    public boolean hasPanel() {
+        return false;
+    }
+
+    public void showDocument(LinkTarget doc) {
+        File folder = new File(doc.getURL().getPath());
+        if ( folder.exists() ) {
+               DesktopApi.browse(doc.getURL());
+//               DesktopApi.open(folder);
+//             Desktop desktop = Desktop.getDesktop();
+//             try {
+//                desktop.open(folder);
+//            } catch (IOException e1) {
+//                logger.error("Can't open folder '" + folder.getAbsolutePath() + "'.", e1);
+//            }
+
+        } else {
+            JOptionPane.showMessageDialog(null, PluginServices.getText(this, "Bad_path") + " : " + folder.getAbsolutePath());
+        }
+    }
+
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_Folders_in_gvSIG");
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "Folder_formats");
+    }
+
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc)
+            throws UnsupportedOperationException {
+        return null;
+    }
+
+}
+
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgFormat.java	(revision 798)
@@ -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.hyperlink.app.extension.actions;
+
+import java.io.Serializable;
+import java.net.URI;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public class ImgFormat extends AbstractActionManager implements Serializable {
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = -7625497033974714867L;
+    public static final String actionCode = "Image_format";
+
+    @Override
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException {
+        return new ImgPanel(doc);
+    }
+
+    @Override
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    @Override
+    public boolean hasPanel() {
+        return true;
+    }
+
+    @Override
+    public void showDocument(LinkTarget doc) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_image_files_in_gvSIG");
+    }
+
+    @Override
+    public String getName() {
+        return PluginServices.getText(this, "Image_format");
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgFormat.java	(revision 798)
@@ -0,0 +1,66 @@
+/* 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.hyperlink.app.extension.actions;
+
+import java.io.Serializable;
+import java.net.URI;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public class SvgFormat extends AbstractActionManager implements Serializable {
+
+    public static final String actionCode = "SVG_format";
+
+    @Override
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException {
+        return new SvgPanel(doc);
+    }
+
+    @Override
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    @Override
+    public boolean hasPanel() {
+        return true;
+    }
+
+    @Override
+    public void showDocument(LinkTarget doc) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_SVG_files_in_gvSIG");
+    }
+
+    @Override
+    public String getName() {
+        return PluginServices.getText(this, "SVG_format");
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtFormat.java	(revision 798)
@@ -0,0 +1,61 @@
+/* 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.hyperlink.app.extension.actions;
+
+import java.io.Serializable;
+import java.net.URI;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public class TxtFormat extends AbstractActionManager implements Serializable {
+
+    public static final String actionCode = "Txt_format";
+
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException {
+        return new TxtPanel(doc);
+    }
+
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    public boolean hasPanel() {
+        return true;
+    }
+
+    public void showDocument(LinkTarget doc) {
+        throw new UnsupportedOperationException();
+    }
+
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_HTML_or_text_files_in_gvSIG");
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "HTML_and_text_formats");
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ImgPanel.java	(revision 798)
@@ -0,0 +1,105 @@
+/* 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.hyperlink.app.extension.actions;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Image;
+import java.awt.image.BufferedImage;
+import java.net.MalformedURLException;
+import java.net.URI;
+
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+import org.gvsig.imageviewer.ImageViewer;
+import org.gvsig.tools.swing.api.SimpleImage;
+import org.gvsig.tools.swing.api.ToolsSwingLocator;
+import org.gvsig.tools.swing.api.ToolsSwingManager;
+import org.gvsig.tools.util.ToolsUtilLocator;
+
+/**
+ * This class extends AbstractHyperLink, and provides suppot to open images of
+ * many formats.
+ * The common supported formats are JPG, ICO, BMP, TIFF, GIF and PNG. Implements
+ * methods from
+ * IExtensionBuilder to make it extending.
+ * 
+ * @author Eustaquio Vercher (IVER)
+ * @author Cesar Martinez Izquierdo (IVER)
+ */
+public class ImgPanel extends AbstractHyperLinkPanel {
+
+    private static final long serialVersionUID = -5200841105188251551L;
+
+    private ImageViewer imageViewer;
+    /**
+     * Default constructor.
+     * @param doc
+     */
+    public ImgPanel(LinkTarget doc) {
+        super(doc);
+        initialize();
+    }
+
+    /**
+     * Initializes this panel.
+     */
+    private void initialize() {
+        this.setLayout(new BorderLayout());
+        this.imageViewer = ToolsUtilLocator.getImageViewerManager().createImageViewer();
+        this.add(this.imageViewer.asJComponent(),BorderLayout.CENTER);
+        this.setPreferredSize(new Dimension(400, 300));
+        showDocument();
+    }
+
+    /**
+     * Implements the necessary code to open images in this panel.
+     */
+    protected void showDocument() {
+        if (!checkAndNormalizeURI()) {
+            return;
+        }
+        if (document.getURL() != null) {
+            this.imageViewer.setImage(document.getURL());
+        } else if (document.getFromProfile() != null) {
+            try {
+                Object profileContent = document.getFromProfile();
+                BufferedImage bufferedImage = null;
+                if (profileContent instanceof SimpleImage) {
+                    bufferedImage = ((SimpleImage) profileContent).getBufferedImage();
+                    this.imageViewer.setImage(bufferedImage);
+                } else {
+                    try {
+                        this.imageViewer.setImage((Image) profileContent);
+                    } catch (Exception ex) {
+                        logger.warn("Not able to convert content from field into image");
+                    }
+                }
+            } catch (Exception ex)  {
+                logger.warn("Not able to get buffered image from document");
+            }
+        }
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ExternTxtFormat.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ExternTxtFormat.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/ExternTxtFormat.java	(revision 798)
@@ -0,0 +1,68 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.actions;
+
+import java.io.Serializable;
+import java.net.URL;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+public class ExternTxtFormat extends AbstractActionManager implements Serializable {
+
+    public static final String actionCode = "TxtExtern_format";
+
+    @Override
+    public AbstractHyperLinkPanel createPanel(LinkTarget doc) throws UnsupportedOperationException {
+        return null;
+    }
+
+    @Override
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    @Override
+    public boolean hasPanel() {
+        return false;
+    }
+
+    @Override
+    public void showDocument(LinkTarget doc) {
+        URL tourl = doc.getURL();
+        DesktopApi.browse(tourl);
+    }
+
+    @Override
+    public String getDescription() {
+        return PluginServices.getText(this, "Shows_HTML_or_text_files_in_system_application");
+    }
+
+    @Override
+    public String getName() {
+        return PluginServices.getText(this, "HTML_and_text_formats_in_system_application");
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfHyperlinkPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfHyperlinkPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/PdfHyperlinkPanel.java	(revision 798)
@@ -0,0 +1,497 @@
+/* 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.hyperlink.app.extension.actions;
+
+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.URI;
+import java.net.URL;
+
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.SetOfIntegerSyntax;
+import javax.print.attribute.standard.PageRanges;
+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.gvsig.andami.IconThemeHelper;
+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.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+import org.jpedal.Display;
+import org.jpedal.PdfDecoder;
+import org.jpedal.exception.PdfException;
+import org.jpedal.objects.PrinterOptions;
+
+public class PdfHyperlinkPanel extends AbstractHyperLinkPanel implements
+    PropertyChangeListener, IWindow {
+
+    private static final long serialVersionUID = 1L;
+    private WindowInfo m_viewInfo;
+    private PdfDecoder pf = 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 static void initializeIcons() {
+    	IconThemeHelper.registerIcon("toolbar-go", "go-next", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("toolbar-go", "go-previous", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("toolbar-go", "go-next-fast", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("toolbar-go", "go-previous-fast", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("toolbar-go", "go-first", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("toolbar-go", "go-last", PdfHyperlinkPanel.class);
+    	IconThemeHelper.registerIcon("action", "document-print", PdfHyperlinkPanel.class);
+    }
+
+    public PdfHyperlinkPanel(LinkTarget doc) {
+        super(doc);
+        initialize();
+    }
+
+    private void initialize() {
+
+        pf = new PdfDecoder();
+
+        try {
+            if (document != null && document.getURL().toURI().isAbsolute()) {
+                String urlString = document.getURL().toString();
+                // avoid the openPdfFileFromURL method in first term, to avoid
+                // the download dialog
+                if (urlString.startsWith("file:")) {
+                    urlString = urlString.replaceFirst("file:/*", "/"); // keep
+                                                                        // just
+                                                                        // one
+                                                                        // slash
+                                                                        // at
+                                                                        // the
+                                                                        // beginning
+                    urlString = urlString.replaceAll("%20", " "); // PdfDecoder
+                                                                  // doesn't
+                                                                  // correctly
+                                                                  // digest %20
+                                                                  // spaces
+                    pf.openPdfFile(urlString);
+                } else {
+                    pf.openPdfFileFromURL(urlString, true);
+                }
+            } else {
+                PluginServices.getLogger().warn(PluginServices.getText(this,
+                    "Hyperlink_linked_field_doesnot_exist"));
+                return;
+            }
+
+            // 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) {
+            NotificationManager.addWarning(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"), e);
+            return;
+        }
+
+        // setup our GUI display
+        initializeViewer();
+
+        // set page number display
+        pageCounter2.setText(currentPage + "");
+        pageCounter3.setText(PluginServices.getText(this, "de") + " "
+            + pf.getPageCount() + " ");
+    }
+
+    public void setCurrentLinkTarget(LinkTarget currentURL) {
+        document = currentURL;
+    }
+
+    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);
+        start.setIcon( IconThemeHelper.getImageIcon("go-first"));      
+        start.setToolTipText(PluginServices.getText(this, "primera_pagina"));
+        // currentBar1.add(start);
+        list[0] = start;
+        start.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        fback.setIcon( IconThemeHelper.getImageIcon("go-previous-fast"));
+        fback.setToolTipText(PluginServices.getText(this, "diez_paginas_atras"));
+        // currentBar1.add(fback);
+        list[1] = fback;
+        fback.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        back.setIcon( IconThemeHelper.getImageIcon("go-previous"));      
+
+        back.setToolTipText(PluginServices.getText(this, "pagina_atras"));
+        // currentBar1.add(back);
+        list[2] = back;
+        back.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        forward.setIcon( IconThemeHelper.getImageIcon("go-next"));      
+        forward.setToolTipText(PluginServices.getText(this, "pagina_delante"));
+        // currentBar1.add(forward);
+        list[8] = forward;
+        forward.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        fforward.setIcon( IconThemeHelper.getImageIcon("go-next-fast"));      
+        fforward.setToolTipText(PluginServices.getText(this,
+            "10_paginas_delante"));
+        // currentBar1.add(fforward);
+        list[9] = fforward;
+        fforward.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        end.setIcon( IconThemeHelper.getImageIcon("go-last"));      
+        end.setToolTipText(PluginServices.getText(this, "ultima_pagina"));
+        // currentBar1.add(end);
+        list[10] = end;
+        end.addActionListener(new ActionListener() {
+
+            public void actionPerformed(ActionEvent e) {
+                if (pf != 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);
+        print.setIcon( IconThemeHelper.getImageIcon("document-print"));      
+        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((SetOfIntegerSyntax) 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;
+    }
+
+    /**
+     * This is not used by hyperlink, but it's kept as it may be
+     * useful to get a quick PDF window in gvSIG.
+     */
+    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() {
+        return WindowInfo.EDITOR_PROFILE;
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/SvgPanel.java	(revision 798)
@@ -0,0 +1,210 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.actions;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.net.URI;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+
+import org.apache.batik.bridge.BridgeContext;
+import org.apache.batik.bridge.DocumentLoader;
+import org.apache.batik.bridge.GVTBuilder;
+import org.apache.batik.bridge.UserAgentAdapter;
+import org.apache.batik.bridge.ViewBox;
+import org.apache.batik.gvt.GraphicsNode;
+import org.apache.batik.gvt.renderer.StaticRenderer;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.svg.SVGDocument;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+
+/**
+ * This class extends AbstractHyperLink, and provides suppot to open images of
+ * many formats.
+ * The common supported formats are JPG, ICO, BMP, TIFF, GIF and PNG. Implements
+ * methods from
+ * IExtensionBuilder to make it extending.
+ * 
+ * @author Eustaquio Vercher (IVER)
+ * @author Cesar Martinez Izquierdo (IVER)
+ */
+public class SvgPanel extends AbstractHyperLinkPanel {
+
+    private static final long serialVersionUID = -5200841105188251551L;
+    private GVTBuilder gvtBuilder = new GVTBuilder();
+    private GraphicsNode gvtRoot = null;
+    private BridgeContext ctx = null;
+    private StaticRenderer renderer = new StaticRenderer();
+    private Element elt;
+    protected static RenderingHints defaultRenderingHints;
+    static {
+        defaultRenderingHints = new RenderingHints(null);
+        defaultRenderingHints.put(RenderingHints.KEY_ANTIALIASING,
+            RenderingHints.VALUE_ANTIALIAS_ON);
+
+        defaultRenderingHints.put(RenderingHints.KEY_INTERPOLATION,
+            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+    }
+
+    /**
+     * Default constructor.
+     */
+    public SvgPanel(LinkTarget doc) {
+        super(doc);
+        initialize();
+    }
+
+    /**
+     * Initializes this panel.
+     */
+    void initialize() {
+        this.setLayout(new BorderLayout());
+        showDocument();
+        // this.setSize(600, 400);
+    }
+
+    /**
+     * Implements the necessary code to open images in this panel.
+     */
+    protected void showDocument() {
+        if (!checkAndNormalizeURI()) {
+            return;
+        }
+
+        ImageIcon image;
+        // try {
+        image = new ImageIcon(getSvgAsImage(document.toString()));
+
+        if (image == null)
+            ; // Incluir error
+        this.setPreferredSize(new Dimension(image.getIconWidth(),
+            image.getIconHeight()));
+        this.setSize(new Dimension(image.getIconWidth(), image.getIconHeight()));
+        JLabel label = new JLabel(image);
+        this.add(label);
+
+        // } catch (MalformedURLException e) {
+        //
+        // }
+    }
+
+    /**
+     * Allows paint SVG images in the panel.
+     * 
+     * @param file
+     *            , this file has been extracted from the URI
+     */
+    private Image getSvgAsImage(String uri) {
+        BufferedImage img =
+            new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g = img.createGraphics();
+        Rectangle2D rect = new Rectangle2D.Double();
+        rect.setFrame(0, 0, 400, 400);
+        obtainStaticRenderer(uri);
+        drawSVG(g, rect, null);
+        return img;
+    }
+
+    /**
+     * Render the image to add to the panel.
+     * 
+     * @param file
+     *            , this file has been extracted from the URI
+     */
+    private void obtainStaticRenderer(String uri) {
+        try {
+            UserAgentAdapter userAgent = new UserAgentAdapter();
+            DocumentLoader loader = new DocumentLoader(userAgent);
+            ctx = new BridgeContext(userAgent, loader);
+            // Document svgDoc = loader.loadDocument(file.toURI().toString());
+            Document svgDoc = loader.loadDocument(uri);
+            gvtRoot = gvtBuilder.build(ctx, svgDoc);
+            renderer.setTree(gvtRoot);
+            elt = ((SVGDocument) svgDoc).getRootElement();
+        } catch (Exception ex) {
+            NotificationManager.addWarning(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"), ex);
+        }
+    }
+
+    /**
+     * Draw SVG in the Graphics that receives like parameter.
+     * 
+     * @param g
+     *            Graphics
+     * @param rect
+     *            Rectangle that fills the Graphic.
+     * @param rv
+     *            Rectangle. This forms the visible part in the Layout
+     */
+    private void drawSVG(Graphics2D g, Rectangle2D rect, Rectangle2D rv) {
+        if ((rv == null) || rv.contains(rect)) {
+            AffineTransform ataux = new AffineTransform();
+
+            ataux.translate(rect.getX(), rect.getY());
+            try {
+                ataux.concatenate(ViewBox.getViewTransform(null,
+                    elt,
+                    (float) rect.getWidth(),
+                    (float) rect.getHeight(),
+                    ctx));
+                gvtRoot.setTransform(ataux);
+
+            } catch (Exception e) {
+                // TODO: handle exception
+            }
+        } else {
+            AffineTransform ataux = new AffineTransform();
+
+            ataux.translate(rect.getX(), rect.getY());
+            ataux.concatenate(ViewBox.getViewTransform(null,
+                elt,
+                (float) rect.getWidth(),
+                (float) rect.getHeight(),
+                ctx));
+
+            gvtRoot.setTransform(ataux);
+        }
+
+        RenderingHints renderingHints = defaultRenderingHints;
+        g.setRenderingHints(renderingHints);
+
+        if (gvtRoot != null) {
+            gvtRoot.paint(g);
+        }
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtPanel.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtPanel.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/actions/TxtPanel.java	(revision 798)
@@ -0,0 +1,96 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.actions;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JTextPane;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.messages.NotificationManager;
+import org.gvsig.hyperlink.app.extension.AbstractHyperLinkPanel;
+import org.gvsig.hyperlink.app.extension.LinkTarget;
+import org.gvsig.webbrowser.WebBrowserFactory;
+import org.gvsig.webbrowser.WebBrowserPanel;
+
+/**
+ * This class extends AbstractHyperLinkPanel. And provides support to open txt
+ * files and
+ * WWW. Implements methods from IExtensionBuilder to make it extending.
+ * 
+ */
+public class TxtPanel extends AbstractHyperLinkPanel {
+
+    private static final long serialVersionUID = 1408583183372898110L;
+
+    /**
+     * Default constructor.
+     */
+    public TxtPanel(LinkTarget doc) {
+        super(doc);
+        initialize();
+    }
+
+    /**
+     * Initializes this panel.
+     */
+    void initialize() {
+        this.setLayout(new BorderLayout());
+        showDocument();
+    }
+
+    /**
+     * Implements the necessary code to show the content of the URI in this
+     * panel. The content of the URI is a TXT or a WWW.
+     */
+    protected void showDocument() {
+        WebBrowserPanel webbrowser = WebBrowserFactory.createWebBrowserPanel();     
+        webbrowser.asJComponent().setPreferredSize(new Dimension(400, 220));
+                
+        if (!checkAndNormalizeURI()) {
+            return;
+        }
+
+        URL url = null;
+        try {
+            url = document.getURL().toURI().normalize().toURL();
+        } catch (MalformedURLException e1) {
+            NotificationManager.addWarning(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"), e1);
+            return;
+        } catch (URISyntaxException ex) {
+            NotificationManager.addWarning(PluginServices.getText(this,
+                "Hyperlink_linked_field_doesnot_exist"), ex);
+            return;
+        }
+        webbrowser.setPage(url);
+        this.add(webbrowser.asJComponent(), BorderLayout.CENTER);
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/HyperlinkExtension.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/HyperlinkExtension.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/HyperlinkExtension.java	(revision 798)
@@ -0,0 +1,282 @@
+/* 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.hyperlink.app.extension;
+
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.IView;
+import org.gvsig.app.project.documents.view.legend.gui.ThemeManagerWindow;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.fmap.mapcontrol.MapControl;
+import org.gvsig.fmap.mapcontrol.tools.Behavior.PointBehavior;
+import org.gvsig.hyperlink.app.extension.actions.ExternTxtFormat;
+import org.gvsig.hyperlink.app.extension.actions.FolderFormat;
+import org.gvsig.hyperlink.app.extension.actions.ImgFormat;
+import org.gvsig.hyperlink.app.extension.actions.PdfFormat;
+import org.gvsig.hyperlink.app.extension.actions.SvgFormat;
+import org.gvsig.hyperlink.app.extension.actions.TxtFormat;
+import org.gvsig.hyperlink.app.extension.config.LayerLinkConfig;
+import org.gvsig.hyperlink.app.extension.config.LinkConfig;
+import org.gvsig.hyperlink.app.extension.config.gui.ConfigTab;
+import org.gvsig.hyperlink.app.extension.layers.ManagerRegistry;
+import org.gvsig.hyperlink.app.extension.layers.VectLayerManager;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.gvsig.tools.extensionpoint.ExtensionPointManager;
+import org.gvsig.tools.library.LibraryException;
+import org.gvsig.tools.util.Caller;
+import org.gvsig.tools.util.impl.DefaultCaller;
+
+/**
+ * Andami extension to show Hyperlink in the application.
+ *
+ * @author gvSIG Team
+ * @version $Id$
+ */
+public class HyperlinkExtension extends Extension {
+
+    private static final Logger LOG = LoggerFactory
+        .getLogger(HyperlinkExtension.class);
+    ManagerRegistry layerManager;
+    public static final String LAYERPROPERTYNAME = "org.gvsig.hyperlink.config";
+    public static final String TOOLNAME = "org.gvsig.hyperlink.tool";
+    public static final String ACTIONSEXTENSIONPOINT = "HyperLinkAction";
+
+    private static final int LEGACY_IMAGE_TYPE = 0;
+    private static final int LEGACY_HTML_TYPE = 1;
+    private static final int LEGACY_PDF_TYPE = 2;
+    private static final int LEGACY_SVG_TYPE = 3;
+
+    /**
+     * @see com.iver.andami.plugins.IExtension#execute(java.lang.String)
+     */
+    public void execute(String s) {
+        IView view = (IView) PluginServices.getMDIManager().getActiveWindow();
+        MapControl mapCtrl = view.getMapControl();
+        LOG.debug("Comand : " + s);
+
+        if (s.compareTo("view-show-hyperlink") == 0) {
+            initTool(view);
+            mapCtrl.setTool(TOOLNAME);
+        }
+    }
+
+    /**
+     * Inits the tool for the provided view.
+     *
+     * @param view
+     */
+    public void initTool(IView view) {
+        MapControl mapCtrl = view.getMapControl();
+        if (view.getMapControl().getNamesMapTools().get(TOOLNAME) == null) {
+            mapCtrl.addBehavior(TOOLNAME,
+                new PointBehavior(new LinkListener(mapCtrl, layerManager)));
+            loadLegacyConfig(view);
+        }
+    }
+
+    public void loadLegacyConfig(IView view) {
+        LayersIterator iterator =
+            new LayersIterator(view.getMapControl().getMapContext().getLayers());
+        while (iterator.hasNext()) {
+            FLayer layer = iterator.nextLayer();
+            loadLegacyConfig(layer);
+        }
+    }
+
+    /**
+     * Returns a LayerLinkConfig object if an old-style or new-style hyperlink
+     * was found and configured,
+     * or null otherwise.
+     *
+     * @param layer
+     */
+    public LayerLinkConfig loadLegacyConfig(FLayer layer) {
+        LayerLinkConfig layerConfig =
+            (LayerLinkConfig) layer.getProperty(LAYERPROPERTYNAME);
+        if (layerConfig != null) { // don't apply compatibility if the layer
+                                   // already has new 1.9.0 configuration
+            return layerConfig;
+        }
+        Object fName = layer.getProperty("legacy.hyperlink.selectedField");
+        if (fName != null && fName instanceof String) {
+            Map properties = layer.getExtendedProperties();
+            properties.remove("legacy.hyperlink.selectedField");
+            // remove it from layer to don't keep legacy properties for ever
+            // in the project
+
+            String fieldName = (String) fName;
+            Object extObj = layer.getProperty("legacy.hyperlink.extension");
+            String extension = null;
+            if (extObj != null && extObj instanceof String) {
+                properties.remove("legacy.hyperlink.extension");
+                // remove it from layer to don't keep legacy properties for ever
+                // in the project
+                extension = (String) extObj;
+            }
+            Object typeObj = layer.getProperty("legacy.hyperlink.type");
+            int type = -1;
+            if (typeObj != null && typeObj instanceof Integer) {
+                properties.remove("legacy.hyperlink.type");
+                // remove it from layer to don't keep legacy properties for ever
+                // in the project
+                type = ((Integer) typeObj).intValue();
+            }
+            LayerLinkConfig config = new LayerLinkConfig();
+            config.setEnabled(true);
+            config.addLink(getLegacyActionCode(type), fieldName, extension);
+            layer.setProperty(LAYERPROPERTYNAME, config);
+            return config;
+        }
+        return null;
+    }
+
+    private String getLegacyActionCode(int type) {
+        switch (type) {
+        case LEGACY_IMAGE_TYPE:
+            return ImgFormat.actionCode;
+        case LEGACY_PDF_TYPE:
+            return PdfFormat.actionCode;
+        case LEGACY_SVG_TYPE:
+            return SvgFormat.actionCode;
+        case LEGACY_HTML_TYPE:
+        default:
+            return TxtFormat.actionCode;
+        }
+    }
+
+    /**
+     * @see com.iver.mdiApp.plugins.IExtension#isVisible()
+     */
+    public boolean isVisible() {
+        IWindow f = PluginServices.getMDIManager().getActiveWindow();
+
+        if (f == null) {
+            return false;
+        }
+
+        if (f instanceof IView) {
+
+            MapContext mapa = ((IView) f).getViewDocument().getMapContext();
+
+            return mapa.getLayers().getLayersCount() > 0;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @see com.iver.andami.plugins.IExtension#isEnabled()
+     */
+    public boolean isEnabled() {
+        IWindow window = PluginServices.getMDIManager().getActiveWindow();
+
+        if (window == null) {
+            return false;
+        }
+
+        if (window instanceof IView) {
+            IView view = (IView) window;
+            ViewDocument viewDocument = view.getViewDocument();
+
+            if (viewDocument != null
+                && viewDocument.getMapContext() != null
+                && viewDocument.getMapContext().getLayers().getVisibles().length > 0) {
+            	FLayers lyrs = viewDocument.getMapContext().getLayers();
+            	FLayer[] lyrsSelected = lyrs.getActives();
+            	for (int i = 0; i < lyrsSelected.length; i++) {
+            		Object obj = lyrsSelected[i].getProperty(HyperlinkExtension.LAYERPROPERTYNAME);
+					if(obj != null)
+						return true;
+				}
+            }
+        }
+        return false;
+    }
+
+    public void postInitialize() {
+        Caller caller = new DefaultCaller();
+
+        caller.add(new LinkConfig.RegisterPersistence());
+        caller.add(new LayerLinkConfig.RegisterPersistence());
+        if( !caller.call() ) {
+            throw new LibraryException(HyperlinkExtension.class, caller.getExceptions());
+        }
+
+        registerLayers();
+        registerActions();
+        registerConfigPanel();
+    }
+
+    private void registerLayers() {
+        layerManager = new ManagerRegistry();
+        layerManager.put(FLyrVect.class, VectLayerManager.class);
+    }
+
+    public ManagerRegistry getLayerManager() {
+        return layerManager;
+    }
+
+    private void registerActions() {
+        ExtensionPointManager epm = ToolsLocator.getExtensionPointManager();
+        ExtensionPoint ep =
+            epm.add(ACTIONSEXTENSIONPOINT,
+                "Registers Actions that are able to manage specific format types.");
+
+        ep.append(TxtFormat.actionCode, "", TxtFormat.class);
+        ep.append(ExternTxtFormat.actionCode, "", ExternTxtFormat.class);
+        ep.append(ImgFormat.actionCode, "", ImgFormat.class);
+        ep.append(PdfFormat.actionCode, "", PdfFormat.class);
+        ep.append(SvgFormat.actionCode, "", SvgFormat.class);
+        ep.append(FolderFormat.actionCode, "", FolderFormat.class);
+
+    }
+
+    private void registerConfigPanel() {
+        // pages
+        ThemeManagerWindow.addPage(ConfigTab.class);
+
+        ThemeManagerWindow.setTabEnabledForLayer(ConfigTab.class,
+            FLyrVect.class,
+            true);
+    }
+
+    public void initialize() {
+        IconThemeHelper.registerIcon("action",
+            "view-show-hyperlink", this);
+        IconThemeHelper.registerIcon("cursor",
+            "cursor-view-show-hyperlink", this);
+
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkListener.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkListener.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkListener.java	(revision 798)
@@ -0,0 +1,214 @@
+/* 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.hyperlink.app.extension;
+
+import java.awt.Cursor;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Toolkit;
+import java.awt.geom.Point2D;
+import java.net.URI;
+
+import org.gvsig.andami.IconThemeHelper;
+import org.gvsig.andami.PluginServices;
+import org.gvsig.app.project.documents.view.toolListeners.InfoListener;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+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;
+import org.gvsig.hyperlink.app.extension.config.LayerLinkConfig;
+import org.gvsig.hyperlink.app.extension.config.LinkConfig;
+import org.gvsig.hyperlink.app.extension.layers.ILinkLayerManager;
+import org.gvsig.hyperlink.app.extension.layers.IncompatibleLayerException;
+import org.gvsig.hyperlink.app.extension.layers.ManagerRegistry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Listener that implements PointListener to show the information of the
+ * HyperLink of the layer,
+ * if the actual layer allows it. When the user selects the tool and make one
+ * clic with
+ * the mouse throws an event to create Panels with the information of the
+ * associated HyperLink
+ * to the layer. Creates one panel for URI provided, to load the information.
+ * 
+ * @author Vicente Caballero Navarro
+ * @author Cesar Martinez Izqueirdo
+ * 
+ */
+public class LinkListener implements PointListener {
+
+    private static Logger logger = LoggerFactory.getLogger(InfoListener.class);
+    private Cursor cur = null;
+    private MapControl mapCtrl;
+    private ManagerRegistry registry;
+//    private Image imageCursor = null;
+    public static final int TYPELINKIMAGE = 0;
+    public static final int TYPELINKTEXT = 1;
+    public ExtensionPoint formatManagers;
+
+    /**
+     * Creates a new LinkListener
+     * 
+     * @param mc
+     *            mapControl
+     */
+    public LinkListener(MapControl mc, ManagerRegistry registry) {
+        this.mapCtrl = mc;
+        this.registry = registry;
+        formatManagers =
+            ToolsLocator.getExtensionPointManager()
+                .get(HyperlinkExtension.ACTIONSEXTENSIONPOINT);
+        initialize();
+    }
+
+    private void initialize() {
+        cur = Toolkit.getDefaultToolkit().createCustomCursor(this.getImageCursor(),
+                    new Point(16, 16),
+                    "Hyperlink");
+    }
+
+    /**
+     * Creates one LinkPanel for URI provided. Gets the active layers and
+     * invokes getLink
+     * with the catched point and the allowed tolerance if these layers allows
+     * HyperLinks.
+     * getLink provides an array of URIs, this method is invoked for all active
+     * layers.
+     * 
+     * @param event
+     *            PointEvent
+     * @throws BehaviorException
+     * 
+     * @see com.iver.cit.gvsig.fmap.tools.Listeners.PointListener#point(com.iver.cit.gvsig.fmap.tools.Events.PointEvent)
+     */
+    @Override
+    public void point(PointEvent event) throws BehaviorException {
+        Point2D pReal =
+            mapCtrl.getMapContext().getViewPort().toMapPoint(event.getPoint());
+        FLayer[] sel = mapCtrl.getMapContext().getLayers().getVisibles();
+
+        LinkTarget[] links = null;
+        LinkConfig linkConfig;
+        ILinkLayerManager layerManager;
+        ILinkActionManager actionManager;
+
+        for (int layerCount = 0; layerCount < sel.length; layerCount++) {
+            FLayer theLayer = sel[layerCount];
+            if (!registry.hasManager(theLayer)) {
+                continue;
+            }
+            try {
+                layerManager = registry.get(theLayer);
+                if (theLayer.getProperty(HyperlinkExtension.LAYERPROPERTYNAME) != null
+                    && theLayer.getProperty(HyperlinkExtension.LAYERPROPERTYNAME) instanceof LayerLinkConfig) {
+                    LayerLinkConfig layerLink =
+                        (LayerLinkConfig) theLayer.getProperty(HyperlinkExtension.LAYERPROPERTYNAME);
+                    if (layerLink.isEnabled() && layerLink.linkCount() > 0) { 
+                        // there is
+                                                                              // some
+                                                                              // link
+                                                                              // configured
+                                                                              // for
+                                                                              // this
+                                                                              // layer
+
+                        double tol = mapCtrl.getViewPort().toMapDistance(3);
+                        for (int actionCount = 0; actionCount < layerLink.linkCount(); actionCount++) {
+                            linkConfig = layerLink.getLink(actionCount);
+                            links =
+                                layerManager.getLink(pReal,
+                                    tol,
+                                    linkConfig.getFieldName(),
+                                    linkConfig.getExtension());
+                            for (int i = 0; i < links.length; i++) {
+                                if (links[i] != null) {
+
+                                    actionManager =
+                                        (ILinkActionManager) formatManagers.get(linkConfig.getActionCode())
+                                            .getExtension()
+                                            .newInstance();
+                                    if (actionManager == null) {
+                                        logger.warn("Hyperlink error -- invalid action code: "
+                                            + linkConfig.getActionCode());
+                                        continue;
+                                    }
+                                    if (actionManager.hasPanel()) {
+                                        ShowPanel lpanel =
+                                            new ShowPanel(actionManager.createPanel(links[i]));
+                                        // show the panel
+                                        PluginServices.getMDIManager()
+                                            .addWindow(lpanel);
+                                    } else { // delegate in the format manager
+                                             // to show the file
+                                        actionManager.showDocument(links[i]);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            } catch (ClassNotFoundException e) {
+                throw new BehaviorException("Hyperlink: There is no manager for this layer type",
+                    e);
+            } catch (InstantiationException e) {
+                logger.error("Hyperlink error: " + e.getMessage(), e);
+            } catch (IllegalAccessException e) {
+                logger.error("Hyperlink error: " + e.getMessage(), e);
+            } catch (IncompatibleLayerException e) {
+                throw new BehaviorException("Hyperlink: There is no manager for this layer type",
+                    e);
+            }
+        }
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#getCursor()
+     */
+    public Cursor getCursor() {
+        return cur;
+    }
+
+    /**
+     * @see com.iver.cit.gvsig.fmap.tools.Listeners.ToolListener#cancelDrawing()
+     */
+    @Override
+    public boolean cancelDrawing() {
+        return false;
+    }
+
+    @Override
+    public void pointDoubleClick(PointEvent event) throws BehaviorException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public Image getImageCursor() {
+    	return IconThemeHelper.getImage("cursor-view-show-hyperlink");
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkTarget.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkTarget.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/LinkTarget.java	(revision 798)
@@ -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.hyperlink.app.extension;
+
+import java.net.URL;
+
+/**
+ *
+ * @author osc
+ */
+public interface LinkTarget {
+    public URL getURL();
+    
+    public void setURL(URL url);
+    
+    public Object getFromProfile();
+    
+    public String getProfileName();
+    
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LayerLinkConfig.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LayerLinkConfig.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LayerLinkConfig.java	(revision 798)
@@ -0,0 +1,123 @@
+/* gvSIG. Geographic Information System of the Valencian Government
+ *
+ * Copyright (C) 2007-2008 Infrastructures and Transports Department
+ * of the Valencian Government (CIT)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ */
+
+package org.gvsig.hyperlink.app.extension.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+public class LayerLinkConfig implements Persistent {
+
+    protected List<LinkConfig> linkList;
+    protected boolean enabled;
+    public static final String LAYERLINKCONFIG_PERSISTENCE_DEFINITION_NAME = "LayerLinkConfig";
+
+    public LayerLinkConfig() {
+        linkList = new ArrayList<LinkConfig>();
+    }
+
+    public void addLink(LinkConfig config) {
+        linkList.add(config);
+    }
+
+    public void addLink(int position, LinkConfig config) {
+        linkList.add(position, config);
+    }
+
+    public void addLink(String actionCode, String fieldName) {
+        linkList.add(new LinkConfig(actionCode, fieldName));
+    }
+
+    public void addLink(String actionCode, String fieldName, String extension) {
+        linkList.add(new LinkConfig(actionCode, fieldName, extension));
+    }
+
+    public LinkConfig removeLink(int linkIndex) {
+        try {
+            return linkList.remove(linkIndex);
+        } catch (IndexOutOfBoundsException ex) {
+            return null;
+        }
+    }
+
+    public LinkConfig getLink(int index) {
+        return linkList.get(index);
+    }
+
+    public int linkCount() {
+        return linkList.size();
+    }
+
+    public String getClassName() {
+        return this.getClass().getName();
+    }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("enabled", this.enabled);
+        state.set("linkList", this.linkList);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.enabled = state.getBoolean("enabled");
+        this.linkList = new ArrayList<LinkConfig>();
+        this.linkList.addAll(state.getList("linkList"));
+    }
+    
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if( manager.getDefinition(LAYERLINKCONFIG_PERSISTENCE_DEFINITION_NAME)==null ) {
+                DynStruct definition = manager.addDefinition(
+                        LayerLinkConfig.class,
+                        LAYERLINKCONFIG_PERSISTENCE_DEFINITION_NAME,
+                        LAYERLINKCONFIG_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+                        null, 
+                        null
+                );
+
+                definition.addDynFieldBoolean("enabled").setMandatory(true);
+                definition.addDynFieldList("linkList").setMandatory(false).setClassOfItems(LinkConfig.class);
+            }
+            return Boolean.TRUE;
+        }
+        
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LinkConfig.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LinkConfig.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/LinkConfig.java	(revision 798)
@@ -0,0 +1,116 @@
+/* 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.hyperlink.app.extension.config;
+
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.persistence.PersistenceManager;
+import org.gvsig.tools.persistence.Persistent;
+import org.gvsig.tools.persistence.PersistentState;
+import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.util.Callable;
+
+public class LinkConfig implements Persistent {
+
+    private String fieldName;
+    private String extension = "";
+    private String actionCode;
+    public static final String LINKCONFIG_PERSISTENCE_DEFINITION_NAME = "LinkConfig";
+
+    public LinkConfig() {
+    }
+
+    public LinkConfig(String actionCode, String fieldName) {
+        this.actionCode = actionCode;
+        this.fieldName = fieldName;
+    }
+
+    public LinkConfig(String actionCode, String fieldName, String extension) {
+        this.actionCode = actionCode;
+        this.fieldName = fieldName;
+        this.extension = extension;
+    }
+
+    public String getFieldName() {
+        return fieldName;
+    }
+
+    public String getActionCode() {
+        return actionCode;
+    }
+
+    public void setFieldName(String fieldName) {
+        this.fieldName = fieldName;
+    }
+
+    public void setActionCode(String actionCode) {
+        this.actionCode = actionCode;
+    }
+
+    public void setExtension(String extension) {
+        this.extension = extension;
+    }
+
+    public String getExtension() {
+        return extension;
+    }
+
+    public String getClassName() {
+        return this.getClass().getName();
+    }
+
+    public void saveToState(PersistentState state) throws PersistenceException {
+        state.set("fieldName", this.fieldName);
+        state.set("extension", this.extension);
+        state.set("actionCode", this.actionCode);
+    }
+
+    public void loadFromState(PersistentState state) throws PersistenceException {
+        this.fieldName = state.getString("fieldName");
+        this.extension = state.getString("extension");
+        this.actionCode = state.getString("actionCode");
+    }
+    
+    public static class RegisterPersistence implements Callable {
+
+        public Object call() throws Exception {
+            PersistenceManager manager = ToolsLocator.getPersistenceManager();
+            if( manager.getDefinition(LINKCONFIG_PERSISTENCE_DEFINITION_NAME)==null ) {
+                DynStruct definition = manager.addDefinition(
+                        LinkConfig.class,
+                        LINKCONFIG_PERSISTENCE_DEFINITION_NAME,
+                        LINKCONFIG_PERSISTENCE_DEFINITION_NAME+" Persistence definition",
+                        null, 
+                        null
+                );
+
+                definition.addDynFieldString("fieldName").setMandatory(true);
+                definition.addDynFieldString("extension").setMandatory(false);
+                definition.addDynFieldString("actionCode").setMandatory(true);
+            }
+            return Boolean.TRUE;
+        }
+        
+    }
+
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/LinkRow.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/LinkRow.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/LinkRow.java	(revision 798)
@@ -0,0 +1,188 @@
+/* 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.hyperlink.app.extension.config.gui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+
+import javax.swing.BorderFactory;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.border.BevelBorder;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.gui.beans.swing.GridBagLayoutPanel;
+
+public class LinkRow extends JPanel {
+
+    JPanel pnlFieldAndExtension = null;
+    JPanel pnlHyperLinkAction = null;
+    JLabel lblLinkExtension = null;
+    JLabel lblLinkField = null;
+    JLabel lblDefaultAction = null;
+    JTextField txtLinkExtension = null;
+    JComboBox cmbLinkField = null;
+    JComboBox cmbLinkType = null;
+
+    public LinkRow() {
+        super();
+        initialize();
+    }
+
+    private void initialize() {
+        GridBagLayoutPanel aux = new GridBagLayoutPanel();
+        aux.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
+        aux.addComponent(getPnlFieldAndExtension(), getPnlHyperLinkAction());
+        this.setLayout(new BorderLayout());
+        this.add(aux, BorderLayout.CENTER);
+    }
+
+    public String getSelectedField() {
+        return (String) getCmbLinkField().getSelectedItem();
+    }
+
+    public void setFields(String[] fields) {
+        for (int i = 0; i < fields.length; i++) {
+            getCmbLinkField().addItem(fields[i]);
+        }
+    }
+
+    public void setSelectedField(String field) {
+        getCmbLinkField().setSelectedItem(field);
+    }
+
+    public int getSelectedAction() {
+        return getCmbLinkType().getSelectedIndex();
+    }
+
+    public String getSelectedActionName() {
+        return (String) getCmbLinkType().getSelectedItem();
+    }
+
+    public void setActions(String[] actions) {
+        for (int i = 0; i < actions.length; i++) {
+            getCmbLinkType().addItem(actions[i]);
+        }
+    }
+
+    public void setSelectedAction(String action) {
+        getCmbLinkType().setSelectedItem(action);
+    }
+
+    public void setSelectedAction(int action) {
+        getCmbLinkType().setSelectedIndex(action);
+    }
+
+    public String getExtension() {
+        return getTxtLinkExtension().getText();
+    }
+
+    public void setExtension(String extension) {
+        getTxtLinkExtension().setText(extension);
+    }
+
+    private JPanel getPnlFieldAndExtension() {
+        if (pnlFieldAndExtension == null) {
+            lblLinkExtension = new JLabel();
+            lblLinkExtension.setText(" \t \t"
+                + PluginServices.getText(this, "Extension"));
+            lblLinkField = new JLabel();
+            lblLinkField.setText(PluginServices.getText(this, "Campo"));
+            pnlFieldAndExtension = new JPanel();
+            pnlFieldAndExtension.add(lblLinkField, null);
+            pnlFieldAndExtension.add(getCmbLinkField(), null);
+            pnlFieldAndExtension.add(lblLinkExtension, null);
+            pnlFieldAndExtension.add(getTxtLinkExtension(), null);
+        }
+        return pnlFieldAndExtension;
+    }
+
+    /**
+     * This method initializes jPanel8. This panel contains the ComboBox to
+     * select
+     * the action, (type of HyperLink)
+     * 
+     * @return javax.swing.JPanel
+     */
+    private JPanel getPnlHyperLinkAction() {
+        if (pnlHyperLinkAction == null) {
+            lblDefaultAction = new JLabel();
+            lblDefaultAction.setText(PluginServices.getText(this, "Action")
+                + "  ");
+            pnlHyperLinkAction = new JPanel();
+            pnlHyperLinkAction.add(lblDefaultAction, null);
+            pnlHyperLinkAction.add(getCmbLinkType(), null);
+        }
+        return pnlHyperLinkAction;
+    }
+
+    /**
+     * This method initializes jComboBox
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbLinkField() {
+        if (cmbLinkField == null) {
+            cmbLinkField = new JComboBox();
+        }
+        return cmbLinkField;
+    }
+
+    /**
+     * This method initializes jTextField
+     * 
+     * @return javax.swing.JTextField
+     */
+    private JTextField getTxtLinkExtension() {
+        if (txtLinkExtension == null) {
+            txtLinkExtension = new JTextField();
+            txtLinkExtension.setPreferredSize(new Dimension(40, 20));
+        }
+        return txtLinkExtension;
+    }
+
+    /**
+     * This method initializes jComboBox1
+     * 
+     * @return javax.swing.JComboBox
+     */
+    private JComboBox getCmbLinkType() {
+        if (cmbLinkType == null) {
+            cmbLinkType = new JComboBox();
+
+        }
+        return cmbLinkType;
+    }
+
+    public void setEnabled(boolean enabled) {
+        super.setEnabled(enabled);
+        getTxtLinkExtension().setEnabled(enabled);
+        getCmbLinkField().setEnabled(enabled);
+        getCmbLinkType().setEnabled(enabled);
+        lblLinkField.setEnabled(enabled);
+        lblDefaultAction.setEnabled(enabled);
+        lblLinkExtension.setEnabled(enabled);
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/ConfigTab.java
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/ConfigTab.java	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/src/main/java/org/gvsig/hyperlink/app/extension/config/gui/ConfigTab.java	(revision 798)
@@ -0,0 +1,494 @@
+/* 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.hyperlink.app.extension.config.gui;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+
+import javax.swing.BorderFactory;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.border.EtchedBorder;
+import javax.swing.border.TitledBorder;
+
+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.legend.gui.AbstractThemeManagerPage;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
+import org.gvsig.hyperlink.app.extension.AbstractActionManager;
+import org.gvsig.hyperlink.app.extension.HyperlinkExtension;
+import org.gvsig.hyperlink.app.extension.config.LayerLinkConfig;
+import org.gvsig.hyperlink.app.extension.config.LinkConfig;
+import org.gvsig.hyperlink.app.extension.layers.ILinkLayerManager;
+import org.gvsig.hyperlink.app.extension.layers.IncompatibleLayerException;
+import org.gvsig.hyperlink.app.extension.layers.ManagerRegistry;
+import org.gvsig.tools.ToolsLocator;
+import org.gvsig.tools.extensionpoint.ExtensionPoint;
+
+public class ConfigTab extends AbstractThemeManagerPage implements IWindow,
+    ActionListener, ItemListener {
+
+    FLayer layer;
+    ArrayList rows = new ArrayList();
+    JPanel rowList = null;
+    GridBagLayout listLayout = null;
+    private String[] actionCodes = null;
+    private String[] actionNames = null;
+    WindowInfo _windowInfo = null;
+    JButton jbt_accept = null, jbt_cancel = null;
+    JPanel emptyRow;
+    JCheckBox jcb_enabled = null;
+    JPanel borderPanel = null;
+    JButton jbt_addAction = null, jbt_removeAction = null;
+
+    public ConfigTab() {
+        super();
+        initialize();
+    }
+
+    private void initialize() {
+        this.setLayout(new GridBagLayout());
+
+        Insets insets = new Insets(8, 8, 8, 8);
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        constraints.weightx = 1.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        this.add(getEnabledCheckBox(), constraints);
+
+        borderPanel = new JPanel(new GridBagLayout());
+        borderPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED),
+            PluginServices.getText(this, "Actions"),
+            TitledBorder.DEFAULT_JUSTIFICATION,
+            TitledBorder.DEFAULT_POSITION,
+            null,
+            null));
+
+        insets = new Insets(8, 8, 8, 8);
+        constraints = new GridBagConstraints();
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        constraints.weightx = 1.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        borderPanel.add(getAddRemoveActionsPanel(), constraints);
+
+        listLayout = new GridBagLayout();
+        rowList = new JPanel(listLayout);
+
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.SOUTH;
+        emptyRow = new JPanel();
+        rowList.add(emptyRow, constraints);
+
+        JScrollPane scrolledList = new JScrollPane();
+        scrolledList.setBorder(null);
+        scrolledList.setViewportView(rowList);
+
+        constraints.gridx = 0;
+        constraints.gridy = 1;
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.fill = GridBagConstraints.BOTH;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.CENTER;
+        borderPanel.add(scrolledList, constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 1;
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.fill = GridBagConstraints.BOTH;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.NORTHWEST;
+        this.add(borderPanel, constraints);
+
+        // initAcceptCancelButtons(); uncomment this if you want to use this
+        // window outside the ThemeManager
+    }
+
+    private void initAcceptCancelButtons() {
+        JPanel acceptCancelButtons = new JPanel(new GridBagLayout());
+        Insets insets = new Insets(14, 4, 8, 8);
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.gridx = 0;
+        constraints.gridy = 0;
+        constraints.weightx = 1.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.EAST;
+        acceptCancelButtons.add(getAcceptButton(), constraints);
+
+        constraints.gridx = 1;
+        constraints.gridy = 0;
+        constraints.weightx = 0.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.EAST;
+        acceptCancelButtons.add(getCancelButton(), constraints);
+
+        constraints.gridx = 0;
+        constraints.gridy = 2;
+        constraints.weightx = 0.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.insets = insets;
+        constraints.anchor = GridBagConstraints.SOUTHEAST;
+        this.add(acceptCancelButtons, constraints);
+    }
+
+    private String[] getActionNames() {
+        if (actionNames == null) {
+            ExtensionPoint actions =
+                ToolsLocator.getExtensionPointManager()
+                    .get(HyperlinkExtension.ACTIONSEXTENSIONPOINT);
+
+            String[] actionArray = new String[actions.getCount()];
+            String[] codes = getActionCodes();
+            for (int i = 0; i < codes.length; i++) {
+                try {
+                    AbstractActionManager aam =
+                        (AbstractActionManager) actions.get(codes[i])
+                            .getExtension()
+                            .newInstance();
+                    actionArray[i] = aam.getName();
+                } catch (InstantiationException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                } catch (IllegalAccessException e) {
+                    // TODO Auto-generated catch block
+                    e.printStackTrace();
+                }
+            }
+            actionNames = actionArray;
+        }
+        return actionNames;
+    }
+
+    private String[] getActionCodes() {
+        if (actionCodes == null) {
+            ExtensionPoint actions =
+                ToolsLocator.getExtensionPointManager()
+                    .get(HyperlinkExtension.ACTIONSEXTENSIONPOINT);
+            String[] actionArray = new String[actions.getCount()];
+            actionArray = (String[]) actions.getNames().toArray(actionArray);
+            actionCodes = actionArray;
+        }
+        return actionCodes;
+    }
+
+    private String[] getCandidateFields() {
+        HyperlinkExtension ext =
+            (HyperlinkExtension) PluginServices.getExtension(HyperlinkExtension.class);
+        ManagerRegistry registry = ext.getLayerManager();
+        try {
+            ILinkLayerManager manager;
+            manager = registry.get(layer);
+            manager.setLayer(layer);
+            return manager.getFieldCandidates();
+        } catch (InstantiationException e) {
+            PluginServices.getLogger()
+                .warn("Hyperlink: error getting candidate fields", e);
+        } catch (IllegalAccessException e) {
+            PluginServices.getLogger()
+                .warn("Hyperlink: error getting candidate fields", e);
+        } catch (ClassNotFoundException e) {
+            PluginServices.getLogger()
+                .warn("Hyperlink: error getting candidate fields", e);
+        } catch (IncompatibleLayerException e) {
+            PluginServices.getLogger()
+                .warn("Hyperlink: error getting candidate fields", e);
+        } catch (NullPointerException e) {
+            PluginServices.getLogger().warn("Hyperlink: error getting manager", e);
+        }
+        return new String[0];
+    }
+
+    public void acceptAction() {
+        applyAction();
+    }
+
+    public void applyAction() {
+        LayerLinkConfig config = new LayerLinkConfig();
+        for (int i = 0; i < rows.size(); i++) {
+            LinkRow row = (LinkRow) rows.get(i);
+            
+            if (row.getSelectedField() != null
+                && row.getSelectedAction() != -1) {
+                
+                config.addLink(getActionCodes()[row.getSelectedAction()],
+                    row.getSelectedField(),
+                    row.getExtension());
+            }
+        }
+        config.setEnabled(getEnabledCheckBox().isSelected());
+        layer.setProperty(HyperlinkExtension.LAYERPROPERTYNAME, config);
+    }
+
+    public void cancelAction() {
+    }
+
+    public String getName() {
+        return PluginServices.getText(this, "Hyperlink");
+    }
+
+    public void setModel(FLayer layer) {
+        this.layer = layer;
+        if( layer!=null && !layer.isAvailable() ) {
+            setLinkEnabled(false);
+            getEnabledCheckBox().setEnabled(false);
+            return;
+        }
+        synchronized (rows) {
+            HyperlinkExtension ext =
+                (HyperlinkExtension) PluginServices.getExtension(HyperlinkExtension.class);
+            LayerLinkConfig layerConfig = ext.loadLegacyConfig(layer);
+            for (int i = rows.size() - 1; i >= 0; i--) { // clean rows
+                LinkRow row = (LinkRow) rows.remove(i);
+                rowList.remove(row);
+            }
+
+            if (layerConfig != null) {
+                for (int i = 0; i < layerConfig.linkCount(); i++) {
+                    LinkRow row = addRow();
+                    LinkConfig config = layerConfig.getLink(i);
+                    String selectedAction = config.getActionCode();
+                    String[] actions = getActionCodes();
+                    for (int j = 0; j < actions.length; j++) {
+                        if (actions[j].equals(selectedAction)) {
+                            row.setSelectedAction(j);
+                        }
+                    }
+                    row.setSelectedField(config.getFieldName());
+                    row.setExtension(config.getExtension());
+                }
+                if (layerConfig.linkCount() < 1) {
+                    addRow(); // just one row by default
+                }
+                setLinkEnabled(layerConfig.isEnabled());
+            } else {
+                addRow(); // just one row by default
+                setLinkEnabled(false);
+            }
+        }
+    }
+
+    protected JPanel getAddRemoveActionsPanel() {
+        JPanel container = new JPanel();
+        container.add(getAddActionButton());
+        container.add(getRemoveActionButton());
+        return container;
+    }
+
+    protected LinkRow addRow() {
+        LinkRow row = new LinkRow();
+        row.setFields(getCandidateFields());
+        row.setActions(getActionNames());
+        synchronized (rows) {
+            rows.add(row);
+
+            GridBagConstraints constraints = new GridBagConstraints();
+            constraints.gridx = 0;
+            constraints.gridy = rows.size() - 1;
+            constraints.weightx = 1.0;
+            constraints.weighty = 0.0;
+            constraints.fill = GridBagConstraints.HORIZONTAL;
+            constraints.insets = new Insets(2, 4, 2, 4);
+            constraints.anchor = GridBagConstraints.NORTH;
+            rowList.add(row, constraints);
+
+            constraints = new GridBagConstraints();
+            constraints.gridx = 0;
+            constraints.gridy = rows.size();
+            constraints.weightx = 1.0;
+            constraints.weighty = 1.0;
+            constraints.fill = GridBagConstraints.NONE;
+            constraints.anchor = GridBagConstraints.CENTER;
+            listLayout.setConstraints(emptyRow, constraints);
+        }
+        validate();
+        return row;
+    }
+
+    protected boolean removeBottomRow() {
+        LinkRow row;
+        synchronized (rows) {
+            if (rows.size() <= 1)
+                return false;
+            row = (LinkRow) rows.get(rows.size() - 1);
+            rows.remove(rows.size() - 1);
+        }
+        rowList.remove(row);
+        GridBagConstraints constraints = new GridBagConstraints();
+        constraints.gridx = 0;
+        constraints.gridy = rows.size();
+        constraints.weightx = 1.0;
+        constraints.weighty = 1.0;
+        constraints.fill = GridBagConstraints.NONE;
+        constraints.anchor = GridBagConstraints.CENTER;
+        listLayout.setConstraints(emptyRow, constraints);
+
+        validate();
+        repaint();
+        return true;
+    }
+
+    protected JButton getAddActionButton() {
+        if (jbt_addAction == null) {
+            jbt_addAction =
+                new JButton(PluginServices.getText(this, "Add_action"));
+            jbt_addAction.setSize(150, 70);
+            jbt_addAction.setActionCommand("addButton");
+            jbt_addAction.addActionListener(new ActionListener() {
+
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getActionCommand().equals("addButton")) {
+                        addRow();
+                    }
+                }
+            });
+        }
+        return jbt_addAction;
+    }
+
+    protected JButton getRemoveActionButton() {
+        if (jbt_removeAction == null) {
+            jbt_removeAction =
+                new JButton(PluginServices.getText(this, "Remove_action"));
+            jbt_removeAction.setActionCommand("removeButton");
+            jbt_removeAction.addActionListener(new ActionListener() {
+
+                public void actionPerformed(ActionEvent e) {
+                    if (e.getActionCommand().equals("removeButton")) {
+                        removeBottomRow();
+                    }
+                }
+            });
+            return jbt_removeAction;
+        }
+        return jbt_removeAction;
+    }
+
+    public WindowInfo getWindowInfo() {
+        if (_windowInfo == null) {
+            _windowInfo =
+                new WindowInfo(WindowInfo.ICONIFIABLE | WindowInfo.MAXIMIZABLE
+                    | WindowInfo.RESIZABLE);
+            _windowInfo.setWidth(680);
+            _windowInfo.setHeight(500);
+            _windowInfo.setTitle(PluginServices.getText(this,
+                "Hyperlink_Settings"));
+        }
+        return _windowInfo;
+    }
+
+    protected JButton getAcceptButton() {
+        if (jbt_accept == null) {
+            jbt_accept =
+                new org.gvsig.gui.beans.swing.JButton(PluginServices.getText(this,
+                    "Aceptar"));
+            jbt_accept.addActionListener(this);
+        }
+        return jbt_accept;
+    }
+
+    protected JButton getCancelButton() {
+        if (jbt_cancel == null) {
+            jbt_cancel =
+                new org.gvsig.gui.beans.swing.JButton(PluginServices.getText(this,
+                    "Cancel"));
+            jbt_cancel.addActionListener(this);
+        }
+        return jbt_cancel;
+    }
+
+    protected JCheckBox getEnabledCheckBox() {
+        if (jcb_enabled == null) {
+            jcb_enabled =
+                new JCheckBox(PluginServices.getText(this, "Enable_hyperlink"),
+                    true);
+            jcb_enabled.addItemListener(this);
+        }
+        return jcb_enabled;
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        if (e.getSource() == getAcceptButton()) {
+            acceptAction();
+            PluginServices.getMDIManager().closeWindow(this);
+
+        } else
+            if (e.getSource() == getCancelButton()) {
+                cancelAction();
+                PluginServices.getMDIManager().closeWindow(this);
+            }
+    }
+
+    protected void setListEnabled(boolean enabled) {
+        getAddActionButton().setEnabled(enabled);
+        getRemoveActionButton().setEnabled(enabled);
+        synchronized (rows) {
+            for (int i = 0; i < rows.size(); i++) {
+                LinkRow row = (LinkRow) rows.get(i);
+                row.setEnabled(enabled);
+            }
+        }
+    }
+
+    protected void setLinkEnabled(boolean enabled) {
+        getEnabledCheckBox().setSelected(enabled);
+        setListEnabled(enabled);
+    }
+
+    public void itemStateChanged(ItemEvent e) {
+        if (e.getSource() == getEnabledCheckBox()) {
+            if (e.getStateChange() == ItemEvent.DESELECTED) {
+                setListEnabled(false);
+            } else {
+                setListEnabled(true);
+            }
+        }
+    }
+
+    public Object getWindowProfile() {
+        return WindowInfo.DIALOG_PROFILE;
+    }
+}
Index: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/pom.xml
===================================================================
--- org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/pom.xml	(revision 0)
+++ org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension/pom.xml	(revision 798)
@@ -0,0 +1,174 @@
+<?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.hyperlink.app.extension</artifactId>
+  <packaging>jar</packaging>
+  <name>${project.artifactId}</name>
+  <parent>
+    <groupId>org.gvsig</groupId>
+    <artifactId>org.gvsig.hyperlink.app</artifactId>
+    <version>1.0.154</version>
+  </parent>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.andami</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.i18n</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.tools.lib</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.fmap.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.fmap.geometry.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.fmap.dal.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.projection.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.utils</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.gvsig</groupId>
+      <artifactId>org.gvsig.ui</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+    <!-- External libraries -->
+
+    <dependency>
+      <groupId>org.jpedal</groupId>
+      <artifactId>jpedal_lgpl</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.sun</groupId>
+      <artifactId>jimi</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-gvt</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-bridge</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xmlgraphics</groupId>
+      <artifactId>batik-script</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>xml-apis</groupId>
+      <artifactId>xml-apis-ext</artifactId>
+      <scope>compile</scope>
+    </dependency>
+
+
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <!-- Set java compatibility -->
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+          <encoding>ISO-8859-1</encoding>
+        </configuration>
+      </plugin>
+
+<!--
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>animal-sniffer-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>check-java-api</id>
+            <phase>package</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+            <configuration>
+              <skip>false</skip>
+              <signature>
+                <groupId>org.codehaus.mojo.signature</groupId>
+                <artifactId>java16</artifactId>
+                <version>1.0</version>
+              </signature>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+-->
+    </plugins>
+  </build>
+
+
+
+  <properties>
+    <gvsig.package.info.name>Tools: Hyperlink</gvsig.package.info.name>
+    <gvsig.package.info.state>testing</gvsig.package.info.state>
+    <gvsig.package.info.categories>View</gvsig.package.info.categories>
+    <gvsig.package.info.official>true</gvsig.package.info.official>
+    <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2</gvsig.package.info.dependencies>
+    <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-hyperlink/pool</gvsig.package.info.poolURL>
+    <gvsig.package.info.javaVM>j1_6</gvsig.package.info.javaVM>
+
+  </properties>
+
+
+</project>

Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154/org.gvsig.hyperlink.app.extension
___________________________________________________________________
Added: svn:ignore
   + target



Property changes on: org.gvsig.hyperlink.app/tags/org.gvsig.hyperlink.app-1.0.154
___________________________________________________________________
Added: svn:ignore
   + target


