[Gvsig_desarrolladores] Extensi髇 con scripting

Alicia Duarte duartealicia en yahoo.com.ar
Mar Oct 6 13:15:53 CEST 2015


Muchas gracias Joaqu铆n, muy completa tu ayuda :)
Voy a verlo y luego te cuento...
Saludos
Alicia Duarte - Argentina

El 5 de octubre de 2015, 13:32, Joaquin Jose del Cerro Murciano <
jjdelcerro en gvsig.org> escribi贸:

>
>
> El 28 de septiembre de 2015, 16:13, Alicia Duarte <
> duartealicia en yahoo.com.ar> escribi贸:
>
>> Hola a todos!!!
>>> Estoy viendo el tema de generar una extensi贸n con scripting, que se
>>> dispare desde una opci贸n de men煤.
>>> Por lo que he investigado se necesita tener un config.xml donde se
>>> define la entrada del men煤 y tambi茅n se indica acci贸n a ejecutar al
>>> seleccionarla.
>>> Bas谩ndome en un ejemplo que hab铆a para versi贸n de gvSIG 1.x configur茅 de
>>> esta manera el config.xml. Me agrega la entrada en el men煤 pero no me
>>> reconoce el valor de "action-command".
>>> Existe la manera de poder invocar al archivo .py y al .dlg desde el
>>> config.xml en gvSIG 2.x?
>>>
>>> <?xml version="1.0" encoding="ISO-8859-1"?>
>>> <plugin-config>
>>>     <libraries
>>> library-dir="../org.gvsig.scripting.app.extension/scripting"/>
>>>     <depends plugin-name="org.gvsig.scripting.app.extension"/>
>>>         <resourceBundle name="text"/>
>>>     <extensions>
>>>         <extension
>>> class-name="org.gvsig.scripting.app.extension.ScriptingExtension"
>>>
>>>             description="Extensi贸n para el manejo de scripts en gvSIG"
>>>
>>>             active="true">
>>>             <menu text="tools/Scripting/Centrar vista en un punto"
>>>                 tooltip="Centrar la vista en un punto"
>>>                 action-command =
>>> "show(fileName='gvSIG/extensiones/centrarVistaSobreUnPunto/centrarVistaSobreUnPunto.xml',language='python',title='Centrar
>>> la vista a un punto',width=210,height=86)"
>>>                 icon="images/default.png"
>>>                 position="55"
>>>                 />
>>>             <menu text="tools/Scripting/Borrar puntos"
>>>                 tooltip="Borrar puntos"
>>>                 action-command =
>>> "run(fileName='gvSIG/extensiones/centrarVistaSobreUnPunto/limpiarElGraphics.py',language='python')"
>>>
>>>                 icon="images/default.png"
>>>                 position="56"
>>>                 />
>>>         </extension>
>>>     </extensions>
>>> </plugin-config>
>>>
>>>
> Hola Alicia,
> perdona por tardar tanto en decir algo, pero estaba fuera y se me paso
> por alto el correo.
>
> En principio, lo que quieres hacer no funciona correctamente en gvSIG 2.
> No se pueden asociar scripts a extensiones en el config.xml (bueno en
> realidad
> si se puede pero hay un error en el classpath y no creo que se arregle).
>
> Ahora bien la forma de hacer lo que quieres seria otra.
>
> Puedes crear un script que se llame "autorun". Este script se ejecutara al
> arrancar gvSIG, y desde el puedes a帽adir botones a la barra de herramientas
> o entradas a los menus y  asociarles scripts.
>
> 驴 Donde debes dejar este autorun ?
> Pues puedes dejarlo en varias partes... puedes dejarlo en el raiz de los
> scrips de usuario, eso seria lo mas simple... pero solo estaria disponible
> para ese usuario.
>
> A falta de poder generar paquetes con nuestros scripts para instalarlos
> desde el administrador de complementos, podemos meter nuestros scripts
> dentro de un plugin, y si ahi hay un "autorun" tambien se ejecutaria al
> arrancar gvSIG.
>
> Y la ventaja es que podriamos empaquetar el plugin con nuestros scripts
> para
> poder instalarlos luego desde el administrador de complementos.
>
> Ahora ire poniendo los detalles.
>
> Vamos a crear un plugin que para el ejemplo he llamado
> "com.acme.testplugin" :)
> Para ello en la carpeta "gvSIG/extensiones" de la instalacion de gvSIG
> crearemos
> las carpetas y ficheros:
>
> gvSIG/extensiones/com.acme.testplugin
> gvSIG/extensiones/com.acme.testplugin/scripting
> gvSIG/extensiones/com.acme.testplugin/scripting/lib
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.png
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.inf
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts/acme.py
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts/autorun.inf
> gvSIG/extensiones/com.acme.testplugin/scripting/scripts/autorun.py
> gvSIG/extensiones/com.acme.testplugin/config.xml
> gvSIG/extensiones/com.acme.testplugin/package.info
>
> Voy contando que tendriamos en cada fichero.
>
>
> En "acme.py" tendriamos el script que queremos ejecutar desde un boton u
> opcion
> de menu. En el caso de ejemplo es muy simple, pero eso ya lo puedes
> complicar tu.
>
> #---------------><----acme.py---><----------------
>
> from commonsdialog import *
>
> def main():
>   msgbox("A.C.M.E. ..... Boom!!!!")
>
> #---------------><-------------><----------------
>
> El acme.png es la imagen que vamos a utilizar en la barra de botones y la
> entrada de menu,
> y el acme.inf se crea automaticamente al crear un script desde el
> composer.
> Tendria algo como:
>
> ;---------------><---acme.inf---><----------------
> [Unit]
> name = acme
> description =
> createdBy =
> version =
>
> [Script]
> main = main
> Lang = python
> ;---------------><-------------><----------------
>
> El "package.info" contiene los metadatos del plugin, y vendria a ser algo
> como:
>
> #---------------><---package.info----><----------------
> #Tue Jun 02 11:21:02 CEST 2015
> owner=ACME Inc
> code=com.acme.testplugin
> java-version=j1_7
> official=false
> type=plugin
> version=2.0.100
> state=final
> operating-system=all
> dependencies=required\: org.gvsig.scripting.app.extension -ge 2
> sources-url=
> web-url=
> architecture=all
> model-version=1.0.1
> categories=
> description=This a example plugin make using scripting
> buildNumber=1
> gvSIG-version=2.2.0
> name=ACME
> #---------------><-------------><----------------
>
> El "config.xml", sigue siendo necesario, pero en una version minimalista:
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <plugin-config>
>   <libraries library-dir="lib"/>
>   <depends plugin-name="org.gvsig.scripting.app.extension"/>
>   <resourceBundle name="text"/>
>   <extensions>
>     <extension class-name="org.gvsig.andami.LibraryExtension"
>       description=""
>       active="true">
>   </extensions>
> </plugin-config>
>
> El "autorun.inf", pues eso, parecido al "acme.inf":
>
> ;---------------><---autorun.inf---><----------------
> [Unit]
> name = autorun
> description =
> createdBy =
> version =
>
> [Script]
> main = main
> Lang = python
> ;---------------><-------------><----------------
>
> Y donde esta el meollo es en el "autorun.py", pero ya le he puesto
> comentarios y salvo el problema del bug en el addMenu, creo que
> el resto se puede entender bastante bien.
>
> #---------------><---autorun.py---><----------------
> from gvsig import *
>
> from commonsdialog import msgbox
>
> from javax.swing import ImageIcon
>
> from org.gvsig.andami import PluginsLocator
> from org.gvsig.scripting.app.extension import ScriptingExtension
> from org.gvsig.tools.swing.api import ToolsSwingLocator
>
>
> from java.lang import Thread
> class fixbug_addMenu(Thread):
>   """
>   Clase de utilidad para rodear un error que hay en la funcion addMenu
>   al a帽adir entradas de menu a los menus de gvSIG.
>   """
>   def __init__(self, name, text):
>     self.name = name
>     self.text = text
>     self.start()
>
>   def run(self):
>     from time import sleep
>     from  org.gvsig.andami import PluginServices
>
>     sleep(5)
>     menu = PluginServices.getMainFrame().getComponentByName(self.name)
>     menu.setText(self.text)
>
>
> def main():
>   application = ApplicationLocator.getManager()
>
>   # Cargamos y registramos el icono en el tema de iconos
>   iconurl = script.getResource("acme.png").toURL()
>   iconimage = ImageIcon(iconurl)
>   iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent()
>   iconTheme.register("Scripting", "action", "tools-scripting-acme",
> iconimage, iconurl)
>
>   # Creamos la accion asociada a nuestro script
>   actionManager = PluginsLocator.getActionInfoManager()
>   action = actionManager.createAction(
>       ScriptingExtension,
>       "tools-scripting-acme",
>       "A.C.M.E.",
>       "acme", # Nombre del script
>       "tools-scripting-acme",
>       None,
>       1009000000,
>       "A.C.M.E. Inc."
>   )
>   # Registramos la accion
>   action = actionManager.registerAction(action)
>
>   # Cargamos en la barra de botones "acme" nuestro nuevo boton
>   # asociado a nuestra accion
>   application.addTool(action, "acme")
>
>   # Y damos de alta una entrada de menu asociada a nuesta accion
>   application.addMenu(action, "tools/Scripting/A.C.M.E.")
>
>   # Esto es por que en gvSIG 2.2 hay un error en la funcion addMenu
>   # y con esto lo rodeamos.
>   fixbug_addMenu("tools-scripting-acme","A.C.M.E.")
>
>   msgbox("A.C.M.E. Inc., instalada")
>
> #---------------><-------------><----------------
>
> Adjunto tambien el fichero "com.acme.testplugin.zip" con el plugin
> completo (que
> basicamente es lo que he incluido ya en el correo salvo el png).
>
> Y lo unico que quedaria seria generar un paquete con esto.
>
> Una vez ya tengas creado el plugin, puedes usar la opcion de menu:
>
>   Herramientas/desarrollo/Crear paquetes de instalacion
>
> Para crear el paquete.
>
> Cuando lo aranques, selecciona tu plugin de la lista, y simplemente
> dandole a siguiente te creara un paquete de instalacion para tu plugin
> hecho enteramente usando scripting. Ten cuidado de no seleccionar la opcion
> de "Habilitar modo avanzado", hay errores en ella y lo mas seguro es que
> acabes
> generando un paquete "chungo".
>
> Cuando este disponible la opcion de empaquetar nuestros scripts desde el
> mismo
> composer, sera bastante mas simple todo esto ya que no precisaremos crear
> un
> plugin para hacerlo.
>
> Espero que te sirva, y si tienes dudas ya sabes pregunta por la lista, en
> cuanto tenga un ratito contesto.
>
> Un saludo
> Joaquin
>
>
>
>
>
>
>
>> Desde ya muchas gracias.
>>> Saludos
>>> Alicia Duarte - Argentina
>>>
>>
>> _______________________________________________
>> gvSIG_desarrolladores mailing list
>> gvSIG_desarrolladores en listserv.gva.es
>> Para ver hist贸rico de mensajes, editar sus preferencias de usuario o
>> darse de baja en esta lista, acuda a la siguiente direcci贸n:
>> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>
>>
>
>
> --
> --------------------------------------
> Joaquin Jose del Cerro Murciano
> Development and software arquitecture manager at gvSIG Team
> jjdelcerro en gvsig.com
> jjdelcerro en gvsig.org
> gvSIG Association
> www.gvsig.com
> www.gvsig.org
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver hist贸rico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente direcci贸n:
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>
------------ pr髕ima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20151006/f5d02406/attachment.htm 


M醩 informaci髇 sobre la lista de distribuci髇 gvSIG_desarrolladores