Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/distribution/distribution.xml
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/distribution/distribution.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/distribution/distribution.xml	(revision 38322)
@@ -0,0 +1,42 @@
+<assembly>
+	<id>distribution</id>
+	<formats>
+		<format>dir</format>
+	</formats>
+	<fileSets>
+	<!-- Extructure for the extension -->
+		<fileSet>
+			<directory>config</directory>
+			<outputDirectory>${extension.install.dir.name}
+			</outputDirectory>
+		</fileSet>
+		<fileSet>
+			<directory>images</directory>
+			<outputDirectory>/${extension.install.dir.name}/images
+			</outputDirectory>
+		</fileSet>
+	</fileSets>
+    <files>
+        <file>
+            <source>package.info</source>
+            <outputDirectory>${extension.install.dir.name}
+            </outputDirectory>
+        </file>
+    </files>
+	<!--
+		***********************************************************************
+	-->
+  <!-- *													   *-->
+	<!--
+		***********************************************************************
+	-->
+	<dependencySets>
+		<dependencySet>
+			<outputDirectory>${extension.install.dir.name}/${library-dir}
+			</outputDirectory>
+			<includes>
+				<include>org.gvsig:org.gvsig.datalocator</include>
+			</includes>
+		</dependencySet>
+	</dependencySets>
+</assembly>
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/buildNumber.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/buildNumber.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/buildNumber.properties	(revision 38322)
@@ -0,0 +1,3 @@
+#maven.buildNumber.plugin properties file
+#Tue May 29 16:41:18 CEST 2012
+buildNumber=2047
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src-test/org/gvsig/datalocator/AllTests.java
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src-test/org/gvsig/datalocator/AllTests.java	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src-test/org/gvsig/datalocator/AllTests.java	(revision 38322)
@@ -0,0 +1,17 @@
+package org.gvsig.datalocator;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class AllTests {
+
+	public static Test suite() {
+		TestSuite suite = new TestSuite(
+				"Test for com.iver.cit.gvsig.datalocator");
+		//$JUnit-BEGIN$
+
+		//$JUnit-END$
+		return suite;
+	}
+
+}
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/config.xml
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/config.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/config.xml	(revision 38322)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<plugin-config>
+	<libraries library-dir="lib"/>
+	<depends plugin-name="org.gvsig.app"/>
+		<resourceBundle name="text"/>
+	<extensions>
+		<extension class-name="org.gvsig.datalocator.DataLocatorExtension"
+			description="Extensión que permite hacer zooms en función de los valores de la base de datos. También permite guardar y recuperar estos zooms."
+			active="true">
+			<menu text="Vista/Localizador_por_atributo" tooltip="Localizador_por_atributo"
+				action-command="DATALOCATOR"
+				icon="view-locator" />
+			<tool-bar name="Herramientas">
+				<action-tool icon="view-locator"
+					action-command="DATALOCATOR" tooltip="Localizador_por_atributo"
+				last="true"/>
+			</tool-bar>
+		</extension>
+	</extensions>
+</plugin-config>
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_cs.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_cs.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_cs.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [cs]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Pole
+Capa=Vrstva
+Localizador_por_atributo=Vyhledat podle atributu
+open_first_time=Otev\u0159\u00edt spole\u010dn\u011b s pohledem
+Salir=Konec
+Valor=Hodnota
+Vista=Pohled
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_fr.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_fr.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_fr.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [fr]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Champ
+Capa=Couche
+Localizador_por_atributo=Localisation par attribut
+open_first_time=Ouvrir avec la vue
+Salir=Quitter
+Valor=Valeur
+Vista=Vue
+Zoom=Zoomer
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_de.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_de.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_de.properties	(revision 38322)
@@ -0,0 +1,11 @@
+#Translations for language [de]
+#Wed Oct 08 17:44:19 CEST 2008
+Campo=Feld
+Capa=Layer
+com.iver.cit.gvsig.Herramientas=
+Localizador_por_atributo=Objekt mittels Attribut suchen
+open_first_time=Mit dem View \u00f6ffnen
+Salir=Schlie\u00dfen
+Valor=Wert
+Vista=Ansicht
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_eu.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_eu.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_eu.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [eu]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Eremua
+Capa=Geruza
+Localizador_por_atributo=Ezaugarrien araberako bilagailua
+open_first_time=Bistarekin ireki
+Salir=Irten
+Valor=Balioa
+Vista=Bista
+Zoom=Zooma
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_it.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_it.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_it.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [it]
+#Tue Nov 07 12:30:01 CET 2006
+Campo=Campo
+Capa=Layer
+Localizador_por_atributo=Localizza per attributo
+open_first_time=Apri con la vista
+Salir=Esci
+Valor=Valore
+Vista=Vista
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [es]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir con la vista
+Salir=Salir
+Valor=Valor
+Vista=Vista
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_zh.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_zh.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_zh.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [en]
+#Fri Nov 03 13:14:56 CET 2006
+Campo=\u5b57\u6bb5
+Capa=\u56fe\u5c42
+Localizador_por_atributo=\u6839\u636e\u7279\u6027\u5b9a\u4f4d
+open_first_time=\u4e0e\u89c6\u56fe\u6253\u5f00
+Salir=\u9000\u51fa
+Valor=\u6570\u636e
+Vista=\u89c6\u56fe
+Zoom=\u7f29\u653e
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_en.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_en.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_en.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [en]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Field
+Capa=Layer
+Localizador_por_atributo=Locate by attribute
+open_first_time=Open with the view
+Salir=Exit
+Valor=Value
+Vista=View
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_gl.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_gl.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_gl.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [gl]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir coa vista
+Salir=Sa\u00edr
+Valor=Valor
+Vista=Vista
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_ca.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_ca.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_ca.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [ca]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Camp
+Capa=Capa
+Localizador_por_atributo=Localitzador per atribut
+open_first_time=Obrir amb la vista
+Salir=Eixir
+Valor=Valor
+Vista=Vista
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_pt.properties
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_pt.properties	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/config/text_pt.properties	(revision 38322)
@@ -0,0 +1,10 @@
+#Translations for language [pt]
+#Mon Oct 30 09:38:21 CET 2006
+Campo=Campo
+Capa=Capa
+Localizador_por_atributo=Localizador por atributo
+open_first_time=Abrir com a vista
+Salir=Fechar
+Valor=Valor
+Vista=Vista
+Zoom=Zoom
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/gpl.txt
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/gpl.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/gpl.txt	(revision 38322)
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/install.txt
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/install.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/install.txt	(revision 38322)
@@ -0,0 +1,5 @@
+Plugin de Localización por atributo para gvSIG. Instrucciones de instalación
+
+- Copiar el contenido de la carpeta bin/ en:
+  gvSIG/extensiones/
+
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/version_history.txt
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/version_history.txt	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/doc/version_history.txt	(revision 38322)
@@ -0,0 +1,23 @@
+Location by attribute Plugin for gvSIG. Version history
+
+This document lists the Change History of release versions of the Location by attribute
+Plugin for gvSIG
+
+
+Version 0.1
+Release Date: 27-06-2005
+
+- Baseline version
+
+
+Version 0.2
+Release Date: 27-07-2005
+
+- Soporte multilenguaje
+
+- Implementación con capas raster
+
+- Diálogos adaptados a Windows y a Linux
+
+- Corrección de bugs
+
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/images/Thumbs.db
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/images/Thumbs.db
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/images/locator.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/images/locator.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/DataLocatorExtension.java
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/DataLocatorExtension.java	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/DataLocatorExtension.java	(revision 38322)
@@ -0,0 +1,199 @@
+/*
+ * Created on 22-jun-2005
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.datalocator;
+
+import java.util.prefs.Preferences;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.plugins.Extension;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.project.documents.view.ViewDocument;
+import org.gvsig.app.project.documents.view.gui.DefaultViewPanel;
+import org.gvsig.datalocator.gui.DataSelectionPanel;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+
+
+/**
+ * The DataLocatorExtension class allows to make a quick zoom based on an
+ * alphanumeric attribute.
+ *
+ * @author jmorell
+ */
+public class DataLocatorExtension extends Extension {
+
+	IWindow iWDataSelection = null;
+	IWindow previousView = null;
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#inicializar()
+     */
+    public void initialize() {
+    	registerIcons();
+
+    }
+
+    private void registerIcons(){
+    	//view-locator
+    	PluginServices.getIconTheme().registerDefault(
+				"view-locator",
+				this.getClass().getClassLoader().getResource("images/locator.png")
+			);
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#execute(java.lang.String)
+     */
+    public void execute(String actionCommand) {
+		DefaultViewPanel vista = (DefaultViewPanel)PluginServices.getMDIManager().getActiveWindow();
+		MapContext mapContext = vista.getModel().getMapContext();
+		DataSelectionPanel dataSelectionPanel = new DataSelectionPanel(mapContext);
+		WindowInfo vi = dataSelectionPanel.getWindowInfo();
+		vi.setX(Preferences.userRoot().getInt("gvSIG.DataLocator.x", vi.getX()));
+		vi.setY(Preferences.userRoot().getInt("gvSIG.DataLocator.y", vi.getY()));
+//		vi.setWidth(Preferences.userRoot().getInt("gvSIG.DataLocator.w", vi.getWidth()));
+//		vi.setHeight(Preferences.userRoot().getInt("gvSIG.DataLocator.h", vi.getHeight()));
+
+		PluginServices.getMDIManager().addWindow(dataSelectionPanel);
+		iWDataSelection = dataSelectionPanel;
+		iWDataSelection.getWindowInfo();
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isEnabled()
+     */
+    public boolean isEnabled() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f.getClass() == DefaultViewPanel.class) {
+
+		    DefaultViewPanel vista = (DefaultViewPanel) f;
+		    ViewDocument model = vista.getModel();
+		    MapContext mapContext = model.getMapContext();
+            if (mapContext.getLayers().getLayersCount() > 0) {
+                LayersIterator iter = newValidLayersIterator(mapContext.getLayers());
+                if (!iter.hasNext()) {
+                	return false;
+                }
+            } else {
+                return false;
+            }
+
+			// Si la vista tiene el tema con el que está configurado
+			// el DataLocator y el usuario ha decidido que se abra
+			// automáticamente, la abrimos inmediatamente.
+            if (iWDataSelection == null || (PluginServices.getMDIManager()
+            		.getWindowInfo(iWDataSelection).isClosed() && f!=previousView)) {
+			    int userOpen = Preferences.userRoot().getInt("gvSIG.DataLocator.open_first_time", -1);
+			    if (userOpen == 1)
+			    {
+					String layerName = Preferences.userRoot().get("LAYERNAME_FOR_DATA_LOCATION", "");
+					FLayer lyr = mapContext.getLayers().getLayer(layerName);
+					if (lyr != null)
+					{
+						DataSelectionPanel dataSelectionPanel = new DataSelectionPanel(mapContext);
+						WindowInfo vi = dataSelectionPanel.getWindowInfo();
+						vi.setX(Preferences.userRoot().getInt("gvSIG.DataLocator.x", vi.getX()));
+						vi.setY(Preferences.userRoot().getInt("gvSIG.DataLocator.y", vi.getY()));
+//						vi.setWidth(Preferences.userRoot().getInt("gvSIG.DataLocator.w", vi.getWidth()));
+//						vi.setHeight(Preferences.userRoot().getInt("gvSIG.DataLocator.h", vi.getHeight()));
+
+						PluginServices.getMDIManager().addWindow(dataSelectionPanel);
+        				iWDataSelection = dataSelectionPanel;
+        				iWDataSelection.getWindowInfo();
+					}
+			    }
+			}
+            previousView = f;
+		}
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see com.iver.andami.plugins.Extension#isVisible()
+     */
+    public boolean isVisible() {
+		org.gvsig.andami.ui.mdiManager.IWindow f = PluginServices.getMDIManager()
+		 .getActiveWindow();
+		if (f == null) {
+		    return false;
+		}
+		if (f.getClass() == DefaultViewPanel.class) {
+		    DefaultViewPanel vista = (DefaultViewPanel) f;
+		    ViewDocument model = vista.getModel();
+		    MapContext mapContext = model.getMapContext();
+            return mapContext.getLayers().getLayersCount() > 0;
+		} else {
+		    return false;
+		}
+    }
+
+    public static LayersIterator newValidLayersIterator(LayerCollection layer) {
+    	return new LayersIterator((FLayer)layer){
+    		public boolean evaluate(FLayer layer) {
+    			if (!(layer instanceof FLyrVect))
+    				return false;
+
+    			FeatureStore featureStore;
+    			try {
+    				featureStore = ((FLyrVect)layer).getFeatureStore();
+    				if (featureStore.getDefaultFeatureType().size() < 1)
+    					return false;
+
+    			} catch (Exception e) {
+    				return false;
+    			}
+    			return true;
+    		}
+    	};
+    }
+}
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/gui/DataSelectionPanel.java
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/gui/DataSelectionPanel.java	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/src/org/gvsig/datalocator/gui/DataSelectionPanel.java	(revision 38322)
@@ -0,0 +1,784 @@
+/*
+ * Created on 22-jun-2005
+ *
+ * gvSIG. Sistema de Información Geográfica de la Generalitat Valenciana
+ *
+ * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
+ *
+ * For more information, contact:
+ *
+ *  Generalitat Valenciana
+ *   Conselleria d'Infraestructures i Transport
+ *   Av. Blasco Ibáñez, 50
+ *   46010 VALENCIA
+ *   SPAIN
+ *
+ *      +34 963862235
+ *   gvsig@gva.es
+ *      www.gvsig.gva.es
+ *
+ *    or
+ *
+ *   IVER T.I. S.A
+ *   Salamanca 50
+ *   46005 Valencia
+ *   Spain
+ *
+ *   +34 963163400
+ *   dac@iver.es
+ */
+package org.gvsig.datalocator.gui;
+
+import java.awt.FlowLayout;
+import java.awt.event.ItemListener;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.prefs.Preferences;
+
+import javax.swing.DefaultComboBoxModel;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.gvsig.andami.PluginServices;
+import org.gvsig.andami.ui.mdiManager.IWindow;
+import org.gvsig.andami.ui.mdiManager.IWindowListener;
+import org.gvsig.andami.ui.mdiManager.SingletonWindow;
+import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.datalocator.DataLocatorExtension;
+import org.gvsig.fmap.dal.exception.DataException;
+import org.gvsig.fmap.dal.feature.Feature;
+import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureQuery;
+import org.gvsig.fmap.dal.feature.FeatureSelection;
+import org.gvsig.fmap.dal.feature.FeatureSet;
+import org.gvsig.fmap.dal.feature.FeatureStore;
+import org.gvsig.fmap.mapcontext.MapContext;
+import org.gvsig.fmap.mapcontext.SelectedZoomVisitor;
+import org.gvsig.fmap.mapcontext.layers.CancelationException;
+import org.gvsig.fmap.mapcontext.layers.FLayer;
+import org.gvsig.fmap.mapcontext.layers.FLayers;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
+import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
+import org.gvsig.fmap.mapcontext.layers.LayersIterator;
+import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
+import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
+import org.gvsig.tools.dispose.DisposableIterator;
+import org.gvsig.tools.dispose.DisposeUtils;
+import org.gvsig.tools.evaluator.Evaluator;
+import org.gvsig.tools.evaluator.EvaluatorData;
+import org.gvsig.tools.evaluator.EvaluatorException;
+import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
+import org.gvsig.tools.exception.BaseException;
+
+
+/**
+ * @author jmorell
+ */
+public class DataSelectionPanel extends JPanel implements IWindow, IWindowListener, SingletonWindow {
+
+	private static final long serialVersionUID = 1L;
+    private JComboBox layerComboBox = null;
+	private JLabel jLabel = null; 
+	private JLabel jLabel1 = null; 
+	private JComboBox fieldValueComboBox = null;
+	private JLabel jLabel2 = null;  
+	private JComboBox fieldNameComboBox = null;
+    private WindowInfo viewInfo = null;
+	private JButton jButton = null;
+	private JButton jButton1 = null;
+	private FLayer layerToZoom = null;
+	private int fieldToZoomIndex = 0;
+	private Object itemToZoom = null;
+	private MapContext mapContext = null;
+	private Preferences prefUsuario = null;
+	private Vector<LayersListener> layersListenerList = new Vector<LayersListener>();
+    private Vector<FLayer> vectorialLayers = null;
+	private JCheckBox jChkBoxOpenFirstTime = null;
+	private JPanel jPanelButtons = null;
+
+	/**
+	 * This method initializes
+	 *
+	 */
+	public DataSelectionPanel(MapContext mapContext) {
+		super();
+		this.mapContext = mapContext;
+		prefUsuario = Preferences.userRoot();
+		initializeVectorialLayers();
+        initializeLayerToZoom();
+		initializeFieldToZoomIndex();
+        initialize();
+
+        int userOpen = prefUsuario.getInt("gvSIG.DataLocator.open_first_time", -1);
+        if (userOpen == 1)
+        	getJChkBoxOpenFirstTime().setSelected(true);
+	}
+    private void initializeVectorialLayers() {
+    	unregisterLayersListener();
+        vectorialLayers = new Vector<FLayer>();
+        LayersIterator iter = DataLocatorExtension.newValidLayersIterator(mapContext.getLayers());
+
+
+        while (iter.hasNext()) {
+        	vectorialLayers.add(iter.nextLayer());
+        }
+
+        registerLayersListener();
+    }
+	private void initializeLayerToZoom() {
+		String layerName = prefUsuario.get("LAYERNAME_FOR_DATA_LOCATION", "");
+        if (layerName.equals("")) layerToZoom = (FLayer)vectorialLayers.get(0);
+        boolean layerFound = false;
+        for (int i=0;i<vectorialLayers.size();i++) {
+            if (((FLayer)vectorialLayers.get(i)).getName().equals(layerName)) {
+                layerFound = true;
+                layerToZoom = (FLayer)vectorialLayers.get(i);
+                break;
+            }
+        }
+        if (!layerFound) layerToZoom = (FLayer)vectorialLayers.get(0);
+        prefUsuario.put("LAYERNAME_FOR_DATA_LOCATION", layerToZoom.getName());
+
+	}
+	private void initializeFieldToZoomIndex() {
+        fieldToZoomIndex = prefUsuario.getInt("FIELDINDEX_FOR_DATA_LOCATION", 0);
+		FLyrVect lyr = (FLyrVect)layerToZoom;
+		FeatureStore featureStore;
+        try {
+            featureStore = lyr.getFeatureStore();
+            if (fieldToZoomIndex > (featureStore.getDefaultFeatureType().size()-1)) {
+            	fieldToZoomIndex = 0;
+            } else if (featureStore.getDefaultFeatureType().size() == 0) {
+            	fieldToZoomIndex = -1;
+            }
+        } catch (DataException e) {
+			fieldToZoomIndex = -1;
+            e.printStackTrace();
+		}
+	}
+	/**
+	 * This method initializes this
+	 *
+	 * @return void
+	 */
+	private void initialize() {
+        jLabel2 = new JLabel();
+        jLabel1 = new JLabel();
+        jLabel = new JLabel();
+        this.setLayout(null);
+        this.setSize(350, 161);
+        jLabel.setBounds(6, 6, 80, 23);
+        jLabel.setText(PluginServices.getText(this,"Capa") + ":");
+        jLabel1.setBounds(6, 34, 80, 23);
+        jLabel1.setText(PluginServices.getText(this,"Campo") + ":");
+        jLabel2.setBounds(6, 61, 80, 23);
+        jLabel2.setText(PluginServices.getText(this,"Valor") + ":");
+        this.add(getJComboBox(), null);
+        this.add(jLabel, null);
+        this.add(jLabel1, null);
+        this.add(getJComboBox1(), null);
+        this.add(jLabel2, null);
+        this.add(getJComboBox2(), null);
+
+        jPanelButtons = new JPanel();
+        FlowLayout flowLayor = new FlowLayout(FlowLayout.RIGHT);
+        flowLayor.setHgap(5);
+
+        jPanelButtons.setLayout(flowLayor);
+        jPanelButtons.setBounds(15,121,335,35);
+        jPanelButtons.add(getJButton(), null);
+        jPanelButtons.add(getJButton1(), null);
+
+        this.add(jPanelButtons);
+
+        this.add(getJChkBoxOpenFirstTime(), null);
+
+
+	}
+	private void registerLayersListener() {
+		int i,j;
+		FLayer layer;
+		LayersListener listener;
+		boolean found;
+		for (i=0;i< vectorialLayers.size();i++) {
+			found = false;
+			layer = ((FLayer)vectorialLayers.get(i));
+			for (j=0;j < layersListenerList.size(); j++) {
+				listener = (LayersListener)layersListenerList.get(j);
+				if ( layer.getParentLayer() == listener.getLayerCollection()) {
+					found = true;
+					break;
+				}
+			}
+			if (!found) {
+				listener = new LayersListener(layer.getParentLayer());
+				layer.getParentLayer().addLayerCollectionListener(listener);
+				layersListenerList.add(listener);
+			}
+
+		}
+	}
+
+
+	private void unregisterLayersListener() {
+		int i;
+		LayersListener listener;
+		for (i=0;i<layersListenerList.size();i++) {
+			listener = (LayersListener)layersListenerList.get(i);
+			listener.getLayerCollection().removeLayerCollectionListener(listener);
+		}
+	}
+
+	private String[] getLayerNames() {
+		String[] layerNames = new String[vectorialLayers.size()];
+	    for (int i=0;i<vectorialLayers.size();i++) {
+	        layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
+	    }
+	    return layerNames;
+	}
+	private String[] getFieldNames() {
+		FLyrVect lyr = (FLyrVect)layerToZoom;
+		FeatureStore featureStore;
+        String[] fieldNames = null;
+		try {
+            featureStore = lyr.getFeatureStore();
+			fieldNames = new String[featureStore.getDefaultFeatureType().size()];
+			for (int i = 0; i < featureStore.getDefaultFeatureType().size(); i++) {
+				fieldNames[i] = ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(i)).getName();
+			}
+        } catch (DataException e) {
+			e.printStackTrace();
+		}
+		return fieldNames;
+	}
+
+
+	private Object[] getNewValues() {
+		FLyrVect lyr = (FLyrVect)layerToZoom;
+		FeatureStore featureStore;
+		Object[] newValues = null;
+		if (fieldToZoomIndex < 0)
+			return null;
+		FeatureSet set = null;
+		DisposableIterator features = null;
+
+		try {
+			featureStore = lyr.getFeatureStore();
+
+//		String sql = "select " + ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(fieldToZoomIndex)).getName() + " from " + featureStore.getName() + " where " + featureStore.getFieldName(fieldToZoomIndex) + " is not null;";
+			FeatureQuery query = featureStore.createFeatureQuery();
+			String field =
+					((FeatureAttributeDescriptor) featureStore.getDefaultFeatureType()
+							.get(fieldToZoomIndex)).getName();
+			Evaluator myEvaluator = new MyEvaluator(field);
+			query.setFilter(myEvaluator);
+			query.setAttributeNames(new String[] { field });
+			set = featureStore.getFeatureSet(query);
+			// ds = ds.getDataSourceFactory().executeSQL(sql,
+			// DataSourceFactory.AUTOMATIC_OPENING);
+
+			// Quitar los nombres repetidos y ordenarlos
+			TreeSet<Object> treeSet =
+					new TreeSet<Object>(new Comparator<Object>() {
+						public int compare(Object o1, Object o2) {
+							if (o1 instanceof Number && o2 instanceof Number) {
+								if (((Number) o1).doubleValue() < ((Number) o2).doubleValue())
+									return -1;
+								if (((Number) o1).doubleValue() > ((Number) o2).doubleValue())
+									return 1;
+							} else if (o1 instanceof String
+									&& o2 instanceof String) {
+								return ((String) o1).compareTo((String) o2);
+							} else if (o1 instanceof Date && o2 instanceof Date) {
+								return ((Date) o1).compareTo((Date) o2);
+							}
+							return 0;
+				}
+					});
+			features = set.iterator();
+			while (features.hasNext()) {
+				Feature feature = (Feature) features.next();
+				Object obj = feature.get(0);
+				treeSet.add(obj);
+			}
+			newValues = (Object[]) treeSet.toArray(new Object[0]);
+		} catch (DataException e) {
+			e.printStackTrace();
+		} finally {
+			if (features != null) {
+				features.dispose();
+			}
+			if (set != null) {
+				set.dispose();
+			}
+		}
+		return newValues;
+	}
+	private class LayersListener implements LayerCollectionListener {
+		private LayerCollection theLayerCollection;
+	    public LayersListener(FLayers layers){
+	    	theLayerCollection = layers;
+	    }
+
+	    public LayerCollection getLayerCollection() {
+	    	return theLayerCollection;
+	    }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void layerAdded(LayerCollectionEvent e) {
+            initializeVectorialLayers();
+            ((ChangeLayerToZoomItemListener)layerComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
+            layerComboBox.removeAllItems();
+		    DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getLayerNames());
+		    layerComboBox.setModel(defaultModel);
+			layerComboBox.setSelectedItem(layerToZoom.getName());
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void layerRemoved(LayerCollectionEvent e) {
+            initializeVectorialLayers();
+            ((ChangeLayerToZoomItemListener)layerComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
+		    if (vectorialLayers.size()>0) {
+	            layerComboBox.removeAllItems();
+				String[] layerNames = new String[vectorialLayers.size()];
+			    boolean currentLayerRemoved = true;
+				for (int i=0;i<vectorialLayers.size();i++) {
+			        layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
+			        if (layerToZoom.getName().equals(layerNames[i])) currentLayerRemoved = false;
+			    }
+			    DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(layerNames);
+			    layerComboBox.setModel(defaultModel);
+			    if (currentLayerRemoved) {
+			        layerToZoom = ((FLayer)vectorialLayers.get(0));
+	    			defaultModel = new DefaultComboBoxModel(getFieldNames());
+	    		    fieldValueComboBox.setModel(defaultModel);
+	    		    fieldToZoomIndex = 0;
+	    		    fieldValueComboBox.setSelectedIndex(fieldToZoomIndex);
+	    		    Object[] values =getNewValues();
+	    			defaultModel = new DefaultComboBoxModel(values);
+	    			fieldNameComboBox.setModel(defaultModel);
+	    			if (values != null) {
+	    				itemToZoom = getNewValues()[0];
+	    				fieldNameComboBox.setSelectedItem(itemToZoom);
+	    			}else {
+	    				itemToZoom = null;
+	    			}
+
+			    }
+			    layerComboBox.setSelectedItem(layerToZoom.getName());
+		    }else {
+            	if (PluginServices.getMainFrame() == null)
+            		((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+            	else
+            		PluginServices.getMDIManager().closeWindow(DataSelectionPanel.this);
+		    }
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+         */
+        public void layerMoved(LayerPositionEvent e) {
+            // TODO Auto-generated method stub
+
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void layerAdding(LayerCollectionEvent e) throws CancelationException {
+            // TODO Auto-generated method stub
+
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
+         */
+        public void layerMoving(LayerPositionEvent e) throws CancelationException {
+            // TODO Auto-generated method stub
+
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void layerRemoving(LayerCollectionEvent e) throws CancelationException {
+            // TODO Auto-generated method stub
+
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void activationChanged(LayerCollectionEvent e) throws CancelationException {
+            // TODO Auto-generated method stub
+
+        }
+        /* (non-Javadoc)
+         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
+         */
+        public void visibilityChanged(LayerCollectionEvent e) throws CancelationException {
+            // TODO Auto-generated method stub
+
+        }
+	}
+    /* (non-Javadoc)
+     * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
+     */
+    public WindowInfo getWindowInfo() {
+        if (viewInfo == null) {
+            viewInfo=new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.PALETTE);
+            viewInfo.setTitle(PluginServices.getText(this,"Localizador_por_atributo"));
+            viewInfo.setHeight(getPreferredSize().height);
+            viewInfo.setWidth(getPreferredSize().width);
+        }
+        return viewInfo;
+    }
+	/**
+	 * This method initializes jComboBox
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJComboBox() {
+		if (layerComboBox == null) {
+			layerComboBox = new JComboBox();
+            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getLayerNames());
+            layerComboBox.setModel(defaultModel);
+			layerComboBox.setBounds(90, 6, 250, 23);
+			layerComboBox.setSelectedItem(layerToZoom.getName());
+			ChangeLayerToZoomItemListener changeLayerToZoomItemListener = new ChangeLayerToZoomItemListener(vectorialLayers);
+			layerComboBox.addItemListener(changeLayerToZoomItemListener);
+		}
+		return layerComboBox;
+	}
+	private class ChangeLayerToZoomItemListener implements ItemListener {
+	    private Vector<FLayer> layers;
+	    public ChangeLayerToZoomItemListener(Vector<FLayer> layers) {
+	        this.layers = layers;
+	    }
+		public void itemStateChanged(java.awt.event.ItemEvent e) {
+		    if (layerComboBox.getItemCount()>0) {
+                for (int i=0;i<layers.size();i++) {
+                    if (((FLayer)layers.get(i)).getName().equals((String)layerComboBox.getSelectedItem())) {
+                        layerToZoom = (FLayer)layers.get(i);
+                        break;
+                    }
+                }
+    			fieldToZoomIndex = 0;
+				prefUsuario.put("LAYERNAME_FOR_DATA_LOCATION", (String)layerComboBox.getSelectedItem());
+    		    DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getFieldNames());
+    		    fieldValueComboBox.setModel(defaultModel);
+    		    Object[] values =getNewValues();
+    		    defaultModel = new DefaultComboBoxModel(values);
+    			fieldNameComboBox.setModel(defaultModel);
+    			if ( values != null) {
+    				fieldNameComboBox.setSelectedIndex(0);
+    				itemToZoom = values[0];
+    			} else {
+    				itemToZoom = null;
+    			}
+		    }
+		}
+        /**
+         * @param layers The layers to set.
+         */
+        public void setLayers(Vector<FLayer> layers) {
+            this.layers = layers;
+        }
+	}
+	/**
+	 * This method initializes jComboBox1
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJComboBox1() {
+		if (fieldValueComboBox == null) {
+			fieldValueComboBox = new JComboBox();
+            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getFieldNames());
+            fieldValueComboBox.setModel(defaultModel);
+			fieldValueComboBox.setBounds(90, 34, 250, 23);
+			fieldValueComboBox.setSelectedIndex(fieldToZoomIndex);
+			ChangeFieldItemListener changeFieldItemListener = new ChangeFieldItemListener(vectorialLayers);
+			fieldValueComboBox.addItemListener(changeFieldItemListener);
+		}
+		return fieldValueComboBox;
+	}
+	private class ChangeFieldItemListener implements ItemListener {
+		public ChangeFieldItemListener(Vector<FLayer> layers) {
+		}
+		public void itemStateChanged(java.awt.event.ItemEvent itemEvent) {
+			String fieldToZoom = ((String)fieldValueComboBox.getSelectedItem());
+			FLyrVect lyr = (FLyrVect)layerToZoom;
+			FeatureStore featureStore;
+			FeatureSet set = null;
+			DisposableIterator features = null;
+			try {
+				featureStore = lyr.getFeatureStore();				
+				prefUsuario.putInt("FIELDINDEX_FOR_DATA_LOCATION", fieldToZoomIndex);
+
+				//Quitar los nombres repetidos y ordenarlos
+				TreeSet<Object> treeSet = new TreeSet<Object>(new Comparator<Object>() {
+					public int compare(Object o1, Object o2) {
+						if (o1 instanceof Number && o2 instanceof Number){
+							if (((Number)o1).doubleValue()<((Number)o2).doubleValue())
+								return -1;
+							if (((Number)o1).doubleValue()>((Number)o2).doubleValue())
+								return 1;
+						}else if (o1 instanceof String && o2 instanceof String){
+							return ((String)o1).compareTo((String)o2);
+						}else if (o1 instanceof Date && o2 instanceof Date){
+							return ((Date)o1).compareTo((Date)o2);
+						}
+						return 0;
+					}
+				});
+
+				Evaluator myEvaluator = new MyEvaluator(fieldToZoom);
+				FeatureQuery query = featureStore.createFeatureQuery();
+				query.setFilter(myEvaluator);	
+				set = featureStore.getFeatureSet(query);
+				features = set.fastIterator();
+				int index = set.getDefaultFeatureType().getAttributeDescriptor(fieldToZoom).getIndex();
+				while (features.hasNext()) {
+					Feature feature = (Feature) features.next();		
+					treeSet.add(feature.get(index));
+				}
+				Object[] newValues = (Object[])treeSet.toArray(new Object[0]);
+				DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(newValues);
+				fieldNameComboBox.setModel(defaultModel);
+				if (newValues.length>0) fieldNameComboBox.setSelectedIndex(0);
+				if (newValues.length>0) {
+					itemToZoom = newValues[0];
+				} else {
+					itemToZoom = null;
+				}
+			} catch (DataException e) {
+				e.printStackTrace();
+			} finally {
+				if (features != null) {
+					features.dispose();
+				}
+				if (set != null) {
+					set.dispose();
+				}
+			}
+		}
+	}
+	/**
+	 * This method initializes jComboBox2
+	 *
+	 * @return javax.swing.JComboBox
+	 */
+	private JComboBox getJComboBox2() {
+		if (fieldNameComboBox == null) {
+			fieldNameComboBox = new JComboBox();
+            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getNewValues());
+            fieldNameComboBox.setModel(defaultModel);
+			fieldNameComboBox.setSelectedIndex(-1);
+			fieldNameComboBox.setBounds(90, 61, 250, 23);
+			ChangeItemToZoomItemListener changeItemToZoomItemListener = new ChangeItemToZoomItemListener(vectorialLayers);
+			fieldNameComboBox.addItemListener(changeItemToZoomItemListener);
+		}
+		return fieldNameComboBox;
+	}
+	private class ChangeItemToZoomItemListener implements ItemListener {
+	    private Vector<FLayer> layers;
+	    public ChangeItemToZoomItemListener(Vector<FLayer> layers) {
+	        this.layers = layers;
+	    }
+		public void itemStateChanged(java.awt.event.ItemEvent e) {
+            for (int i=0;i<layers.size();i++) {
+                if (((FLayer)layers.get(i)).getName().equals((String)layerComboBox.getSelectedItem())) {
+                    layerToZoom = (FLayer)layers.get(i);
+                    break;
+                }
+            }
+			itemToZoom = ((Object)fieldNameComboBox.getSelectedItem());
+		}
+	}
+	/**
+	 * This method initializes jButton
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton() {
+		if (jButton == null) {
+			jButton = new JButton();
+			//jButton.setBounds(8, 121, 128, 23);
+			jButton.setText(PluginServices.getText(this,"Zoom"));
+			jButton.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					if (layerToZoom == null || fieldToZoomIndex < 0 || itemToZoom == null)
+						return;
+				    if (fieldNameComboBox.getSelectedIndex()!=-1) {
+						FLyrVect lyr = (FLyrVect)layerToZoom;
+						FeatureStore featureStore;
+						FeatureSet featureSet = null;
+						DisposableIterator features = null;
+						try {
+			                featureStore = lyr.getFeatureStore();
+							FeatureSelection selection = (FeatureSelection)featureStore.createFeatureSelection();
+							featureSet = featureStore.getFeatureSet();
+							features = featureSet.fastIterator();
+							String fieldToZoom = ((String)fieldValueComboBox.getSelectedItem());
+						    int index = featureSet.getDefaultFeatureType().getAttributeDescriptor(fieldToZoom).getIndex();
+				         
+							while (features.hasNext()) {
+								Feature feature = (Feature) features.next();
+								if (itemToZoom.equals(feature.get(index))){
+									selection.select(feature);
+								}
+							}
+//							featureStore.setSelection(selection);
+							SelectedZoomVisitor visitor = new SelectedZoomVisitor();
+	                        selection.accept(visitor);
+							mapContext.getViewPort().setEnvelope(visitor.getSelectBound());
+
+			            } catch (DataException e1) {
+							e1.printStackTrace();
+						} catch (BaseException e1) {
+							e1.printStackTrace();
+						} finally {
+							DisposeUtils.dispose(featureSet);
+							DisposeUtils.dispose(features);
+						}
+                    } else if (itemToZoom == null) {
+                        System.out.println("Localizador por atributo: El campo valor debe tener elementos no nulos para hacer el Zoom.");
+                    } else {
+				        System.out.println("Localizador por atributo: El campo valor debe estar inicializado antes de hacer Zoom.");
+				    }
+				}
+			});
+		}
+		return jButton;
+	}
+	/**
+	 * This method initializes jButton1
+	 *
+	 * @return javax.swing.JButton
+	 */
+	private JButton getJButton1() {
+		if (jButton1 == null) {
+			jButton1 = new JButton();
+			//jButton1.setBounds(141, 121, 128, 23);
+			jButton1.setText(PluginServices.getText(this,"Salir"));
+			jButton1.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+	            	if (PluginServices.getMainFrame() == null)
+	            		((JDialog) (getParent().getParent().getParent().getParent())).dispose();
+	            	else
+	            		PluginServices.getMDIManager().closeWindow(DataSelectionPanel.this);
+				}
+			});
+		}
+		return jButton1;
+	}
+    /* (non-Javadoc)
+     * @see com.iver.andami.ui.mdiManager.ViewListener#viewActivated()
+     */
+    public void windowActivated() {
+        // TODO Auto-generated method stub
+
+    }
+    /* (non-Javadoc)
+     * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
+     */
+    public void windowClosed() {
+		unregisterLayersListener();
+		// Guardamos la posición en las preferencias del usuario.
+		WindowInfo vi = PluginServices.getMDIManager().getWindowInfo(this);
+		prefUsuario.putInt("gvSIG.DataLocator.x", vi.getX());
+		prefUsuario.putInt("gvSIG.DataLocator.y", vi.getY());
+		prefUsuario.putInt("gvSIG.DataLocator.w", vi.getWidth());
+		prefUsuario.putInt("gvSIG.DataLocator.h", vi.getHeight());
+		vi.setClosed(true);
+    }
+    /* (non-Javadoc)
+     * @see com.iver.andami.ui.mdiManager.SingletonView#getViewModel()
+     */
+    public Object getWindowModel() {
+        // Debe devolver una cadena. Mirar Console del CorePlugin
+        return "DataSelectionPanel";
+    }
+	/**
+	 * This method initializes jChkBoxOpenFirstTime
+	 *
+	 * @return javax.swing.JCheckBox
+	 */
+	private JCheckBox getJChkBoxOpenFirstTime() {
+		if (jChkBoxOpenFirstTime == null) {
+			jChkBoxOpenFirstTime = new JCheckBox();
+			jChkBoxOpenFirstTime.setBounds(new java.awt.Rectangle(90,89,179,23));
+			jChkBoxOpenFirstTime.setText(PluginServices.getText(this, "open_first_time"));
+			jChkBoxOpenFirstTime.addActionListener(new java.awt.event.ActionListener() {
+				public void actionPerformed(java.awt.event.ActionEvent e) {
+					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
+					if (jChkBoxOpenFirstTime.isSelected())
+					{
+						prefUsuario.putInt("gvSIG.DataLocator.open_first_time",1);
+					}
+					else
+					{
+						prefUsuario.putInt("gvSIG.DataLocator.open_first_time",0);
+					}
+				}
+			});
+		}
+		return jChkBoxOpenFirstTime;
+	}
+	public Object getWindowProfile() {
+		return WindowInfo.TOOL_PROFILE;
+	}
+	class MyEvaluator implements Evaluator{
+		private String name=null;
+		private EvaluatorFieldsInfo info = null;
+
+		public MyEvaluator(String name){
+			this.name=name;
+			info = new EvaluatorFieldsInfo();
+			this.info.addFieldValue(name);
+		}
+
+		public Object evaluate(EvaluatorData data)
+				throws EvaluatorException {
+			Feature feature = (Feature) data.getContextValue("feature");
+			if (feature.get(name)!=null)
+				return new Boolean(true);
+			return new Boolean(false);
+		}
+
+		public String getSQL() {
+			return name + " is not null;";
+		}
+
+		public String getDescription() {
+			return "Evaluates if a field is not null";
+		}
+
+		public EvaluatorFieldsInfo getFieldsInfo() {
+			return this.info;
+		}
+
+		public String getName() {
+			return this.getClass().getName();
+		}
+
+    }
+}  //  @jve:decl-index=0:visual-constraint="10,10"
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/pom.xml
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/pom.xml	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/pom.xml	(revision 38322)
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.gvsig.datalocator</artifactId>
+	<name>Tools: Locator by attribute</name>
+	<version>2.0-SNAPSHOT</version>
+	<parent>
+		<artifactId>gvsig-base-extension-pom</artifactId>
+		<groupId>org.gvsig</groupId>
+		<version>2.0-SNAPSHOT</version>
+	</parent>	
+	<description>Locator by atribute</description>
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<testSourceDirectory>src-test</testSourceDirectory>
+        <plugins>
+            <!-- TODO: MAKE TESTS WORK AND REMOVE THIS OPTION -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skipTests>true</skipTests>
+                </configuration>
+            </plugin>       
+        </plugins>        
+	</build>
+	<dependencies>
+		<dependency>
+			<groupId>org.gvsig</groupId>
+			<artifactId>org.gvsig.app</artifactId>
+			<version>2.0-SNAPSHOT</version>
+            <scope>compile</scope>
+		</dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.andami</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.dal</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.mapcontext</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.tools.lib</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.fmap.geometry</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.ui</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.gvsig</groupId>
+            <artifactId>org.gvsig.projection</artifactId>
+            <scope>compile</scope>
+        </dependency>        
+	</dependencies>
+
+	<properties>
+		<build-dir>${basedir}/../build</build-dir>
+        <eclipse.project.name>extDataLocator</eclipse.project.name>
+    	<package.info.dependencies>required: org.gvsig.app -ge 2</package.info.dependencies>
+    	<package.info.state>alpha5</package.info.state>
+	</properties>
+</project>
\ No newline at end of file
Index: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/.cvsignore
===================================================================
--- tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/.cvsignore	(revision 0)
+++ tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator/.cvsignore	(revision 38322)
@@ -0,0 +1,2 @@
+bin
+bin-test

Property changes on: tags/v2_0_0_Build_2047/extensions/extDataLocator/extDataLocator
___________________________________________________________________
Added: svn:ignore
   + .classpath 
.project 
.settings 
maven-eclipse.xml
target
bin
hs_err_pid*
.externalToolBuilders
.settings
.classpath
.project
package.info


