Está en la página 1de 49

Crear una extensin desde 0 en gvSIG

Jorge Piera (piera_jor@gva.es)

Motivacin

Vamos a crear una extensin desde 0 La extensin crear una capa vectorial donde dibujaremos polgonos por cdigo Los polgonos se correspondern con provincias, y tendrn un nombre y un nmero de habitantes rearemos una herramienta !ue devolver el nombre de la provincia al seleccionarla en la vista
2

Motivacin

rear proyecto

rear carpeta "uentes


#eleccionar $%ava &roject' y darle un nombre al proyecto (p)e) *xtMy&lugin+ rear una carpeta llamada $src' para poner los "uentes

"

rear pa!uete

,ay !ue crear un pa!uete llamado $com)iver)cit)gvsig)myplugin'

rear carpetas

rear las carpetas con"ig e images

on"ig)xml

rear el "ichero $con"ig)xml'

rear los "icheros para las traducciones en castellano y en ingl-s (text)properties y text.en)properties+ rear el "ichero build)xml

&

/uild)xml

opiar el contenido del build)xml del proyecto exa*xample0 ambiar la lnea


<property name="plugin" value="com.iver.ejemplo"/>

Por
<property name="plugin" value="com.iver.cit.gvsig.myplugin"/>

*liminar la lnea
<copy file="config/about.htm" todir="${dist "/>

*jecutar el buid
10

omprobaciones
omprobar !ue en la carpeta $."12ndami34gv#5634extensiones' aparece esto

11

7ependencias

,ay !ue indicarle al plugin los proyectos de los !ue depende &inchamos sobre el proyecto con el botn derecho y seleccionamos la opcin $&roperties' #eleccionamos $%ava /uild &ath' 28adimos los proyectos en $&rojects'9

12

7ependencias

*n la pesta8a $libraries', a8adimos las libreras9 ."12ndami:lib:iver3utiles)jar lib;Map:lib:cms)jar lib;Map:lib:driver3manager30)0)jar lib;Map:lib:gdbms30)<3#=2&#,>?)jar

7ependencias

1!

*xtensin

Vamos a crear nuestra primera extensin &ara ello tenemos !ue crear una clase, !ue herede de la clase $*xtension' La podemos llamar $Load&rovincias*xtension'

1"

*xtensin

*scribir el $extends *xtension' 2parecer una $bombilla amarilla' !ue indica un error) &ulsar el ella y elegir la opcin $5mport @*xtension@ (com)iver)andami)plugins+'

1#

*xtensin

La $bombilla' sigue estando) Volver a pulsarla y seleccionar la opcin $add unimplemented methods'

1$

*xtensin

Modi"icar los m-todos is*nabled e isVisible para !ue se habilite la extensin y sea visible) &ara ello tiene !ue devolver $true')

public boolean isVisible() { return true; } public boolean isEnabled() { return true; }

1%

*xtensin

Vamos a ponerle algo de cdigo a la extensin para ver !ue se ejecuta An #ystem)out)println(BMe estoy ejecutandoB+ en el execute ser su"iciente (de momento+

public void execute(String actionCommand){ System.out.println (" e estoy e!ecutando"); }

1&

on"ig)xml

,ay !ue con"igurar el $con"ig)xml' para asociarle una opcin de men a la extensin opiamos el $con"ig)xml' de la extensin exa*xample0 para usarlo de plantilla) reamos una nica extensin9 *l class3nameC 'com)iver)cit)gvsig)myplugin)Load&rovincias *xtension' La opcin de men es $Mi &lugin: argar #hape de provincias' &oner las opciones de men en castellano y en ingl-s
20

&rimera ejecucin

Da podemos ejecutar el $build)xml' y ejecutar gv#56) 7ebera aparecernos la opcin de men !ue hemos a8adido 2l pulsar en ella veremos el mensaje !ue hemos escrito por la consola del eclipse

21

is*nabled

2ntes de incorporar el comportaimento para a8adir una capa, debemos deshabilitar la opcin del men, para !ue solo se vea cuando haya una vista activa ?enemos !ue implementar el m-todo is*nabled de la *xtension

public boolean isEnabled() { "#indo$ v %&luginServices. get '" anager().get(ctive#indo$(); i) (v instanceo) Vie$){ return true; }else{ return )alse; } }

22

argar #hape

Vamos a sustituir el cdigo del $execute' por un cdigo !ue cree una capa de provincias) &artir del cdigo del $ reateMemoryLinesLayer' (copiar el execute+ y crear un tema de polgonos !ue representarn las provincias) Asar $;poligonE7', en lugar de $;polylineE7' Los polgonos se cierran solos omprobar !ue la capa se carga

#e pueden dibujar los polgonos todo lo completos !ue !ueramos

2!

28adir atributos

28adirle a los polgonos los atributos9 579 5denti"icador de la provincia =>M/F*9 =ombre &>/L2 5G=9 =mero de habitantes

(rray*ist array+ields % ne$ (rray*ist(); array+ields.add(""'"); array+ields.add(",- ./E"); array+ields.add("&-.*(C"-,"); Value01 aux/o$ % ne$ Value021;
2"

28adir 2tributos

5nsertar los polgonos con sus respectivos atributos &ara ello simplemente hay !ue darle los valores correctos a $auxFo1' antes de introducir el polgono en la capa)

aux/o$031 % Value+actory.createValue(3); aux/o$041 % Value+actory.createValue("Valencia"); aux/o$051 % Value+actory.createValue(533333);

2#

omprobar !ue "unciona


*jecutar el buid y abrir gv#56 para comprobar !ue "unciona Ver la tabla asociada a la capa

2$

ontrol sobre la vista

Vamos a crear un control !ue nos mostrar en una ventana personaliHada la in"ormacin de una provincia al pulsar sobre ella &rimero deberemos copiar la imagen $ejemplo)png' del proyecto $exa*xample0' a la carpeta images de nuestro plugin 2 continuacin deberemos crear otra extensin llamada $&rovincias5n"o*xtensin'

2%

ontrol sobre la vista

28adir en el con"ig)xml otra entrada para la nueva extensin) class3nameC $com)iver)cit)gvsig)myplugin)&rovincias5n"o*xt ension' 28adir un botn en la barra de herramientas9 en lugar de $menu' hay !ue usar la eti!ueta $toolbar' #e pueden encontrar ejemplos de toolbars en los con"ig@s de los otros proyectos (p)e9 appgv#56+

2&

5n"o/y&ointListener

Vamos a crear una herramienta !ue sea capaH de interactuar sobre la vista al hacer un $clicI' en ella reamos el pa!uete $tools' reamos la clase $5n"o/y&ointListener'

5n"o/y&ointListener

*l listener debe de implementar la inter"aH $&ointListener' 5gual !ue antes, pulsando dos veces la $bombilla amarilla' solucionamos los problemas

5n"o/y&ointListener

,ay !ue a8adirle un atributo de tipo Map ontrol al listener ,ay !ue de"inir un constructor !ue tenga como argumento de entrada ese parmetro
apControl mapControl % null;

private

public "n)o.y&oint*istener( apControl mapControl){ t6is.mapControl % mapControl; }

Ventana de 5n"ormacin

Vamos a crear la ventana !ue va ha mostrarnos la in"ormacin de las provincias reamos el pa!uete $panels' reamos dentro de -l la clase $&rovincias&anel'

Ventana de 5n"ormacin

La ventana tiene !ue heredar de $%panel' e implementar la inter"aH $5Jindo1' An clicI en la $bombilla', y los errores desaparecern

Ventana de 5n"ormacin

ompletar el getVie15n"o con el cdigo9

public #indo$"n)o get#indo$"n)o() { #indo$"n)o m7vie$"n)o % ne$ #indo$"n)o(#indo$"n)o. -'(*'"(*-8); m7vie$"n)o.set#idt6(59:); m7vie$"n)o.set;eig6t(43); m7vie$"n)o.set<itle(&luginServices.get<ext(t6is= "title")); return m7vie$"n)o; }
"

Ventana de 5n"ormacin

La cadena $title' debe a8adirse en los "icheros de traducciones *l set,eight y el setJidth especi"ican las dimensiones !ue tendr la ventana resultante Jindo15n"o)M>72L752L>6 indica el comportamiento de la ventana

Ventana de 5n"ormacin

ompletar el constructor de la ventana para !ue dibuje un cuadro de texto donde aparecer el nombre de la provincia seleccionada ada uno puede crear una ventana ms compleja

Ventana de 5n"ormacin
public &rovincias&anel(String provincias,ame){ super(); ><ext+ield t)&rovincias % ne$ ><ext+ield(); t)&rovincias.set.ounds(:=:=5:3=53); t)&rovincias.set<ext(provincias,ame); t6is.set*ayout(null); t6is.add(t)&rovincias); }

Map ontrol

omponente !ue controla lo !ue se puede hacer sobre una vista #e le pueden a8adir nuevas herramientas *n nuestro caso vamos a a8adirle una herramienta para seleccionar geometras #iempre tiene una herramienta seleccionada (Hoom, desplaHamiento, etc+

&

Anin de los componentes

La extensin deber crear un listener al ser ejecutada y le asociar la vista correspondiente *l listener deber ser capaH de abrir una ventana y escribir el nombre de la provincia
Fegistra Listener 7ibuja Ventana

*xtensin

Map ontrol
!0

Anin *xtensin3Listener

rear en la extensin un listener >btener el Map ontrol y registrarlo argar la herramienta 5mplementar el is*nabled igual !ue antes

!1

Anin *xtensin3Listener
private "n)o.y&oint*istener listener % null; public void execute(String actionCommand){ Vie$ vie$ % (Vie$)&luginServices. get '" anager().get(ctive#indo$(); apControl mc % vie$.get apControl(); i) (listener %% null){ listener % ne$ "n)o.y&oint*istener(mc); mc.add ap<ool("provincias"n)o"=ne$ &oint.e6avior(listener)); } mc.set<ool("provincias"n)o"); }
!2

omprobacin
public void point(&ointEvent event) t6ro$s .e6aviorException { &oint5' p/eal % event.get&oint(); &oint5' map&oint % mapControl.getVie$&ort(). to ap&oint((int)p/eal.get?()= (int)p/eal.get@()); System.out.println("El punto seleccionado esA " B map&oint.get?() B " " B map&oint.get@());

omprobacin

Vamos a comprobar !ue el listener "unciona correctamente &ara ello vamos a modi"icar el m-todo point del 5n"o/y&ointListener para !ue muestre por la consola el punto de la vista $seleccionado'

!!

,acer un "iltro

?enemos !ue obtener una re"erencia a la capa de provincias sobre la !ue se ejecutar la consulta

double tol % mapControl.getVie$&ort(). to ap'istance(4); +*ayers lyrs % mapControl.get apContext().get*ayers(); +*yrVect lyr&rovincias % (+lyrVect)lyrs.get*ayer("Example");

reamos la consulta
+.itSet selection % lyr&rovincias. Cuery.y&oint(map&oint=tol);
!"

Fecuperar los atributos

Fecuperamos el 57, =ombre y la &oblacin de las provincias

i) (Dselection.isEmpty()){ 'ataSource ds % (((lp6anumeric'ata)lyr&rovincias). get/ecordset(); ds.start(); int id+ield % ds.get+ield"ndex.y,ame(""'"); int id,ombre % ds.get+ield"ndex.y,ame(",- ./E"); int id&oblacion % ds.get+ield"ndex.y,ame("&-.*(C"-,"); Value str"' % ds.get+ieldValue( selection.nextSet.it(3)=id+ield); Value str,ombre % ds.get+ieldValue( selection.nextSet.it(3)=id,ombre); Value str&oblacion % ds.get+ieldValue( selection.nextSet.it(3)=id&oblacion); ds.stop();

!#

reamos la ventana de resultados

?enemos !ue crear una ventana de resultados y pasarle en nombre de la provincia ,ay !ue introducir esta ventana en 2ndami

i) (str,ombre D% null){ &rovincias&anel panel % ne$ &rovincias&anel(str,ombre.toString()); &luginServices.get '" anager(). add#indo$(panel); }

!$

5n"o by &oint

!%

6racias por su atencin

!&

También podría gustarte