[Gvsig_desarrolladores] Método recomendado para "Comenzar la edición"

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Lun Sep 5 05:49:25 CEST 2016


El 4 de septiembre de 2016, 20:09, Francisco Puga <fpuga en icarto.es>
escribió:

> Hola,
>
> He visto que de la 2.2 a la 2.3RC2 el código del TableStartEditing, de
> donde se obtiene el EditingNotificationManager,... ha cambiado un poquillo
> y he tenido que reescribir un par de cosas en mi código.
>
> Por eso pregunto cual sería el método recomendado para "Comenzar la
> edición" tanto para Vectorial como para Alfanumérico. Está claro que .edit
> sobre el store inicial la edición pero si quieres hacer el proceso
> completo, notificaciones, cancelación de la edición, ... ahora mismo creo
> que la única opción es copiar y pegar el execute de TableStartEditing en mi
> propio código.
>
> Creo que podría ser interesante refactorizarlo, para tener un doExecute de
> este estilo:
>
> public void execute(String actionCommand) {
>     if ("table-start-editing".equals(actionCommand)) {
>         try {
>             TableDocument doc = (TableDocument) table.getDocument();
>             doExecute(doc);
>          } catch (DataException e) {
>              logger.warn("Problems starting table editing.",e);
>          }
>      }
> }
> public void doExecute(TableDocument doc) throws DataException {
> EditingNotificationManager editingNotification = DALSwingLocator.
> getEditingNotificationManager(); EditingNotification notification =
> editingNotification.notifyObservers( this, EditingNotification.BEFORE_ENTER_EDITING_STORE,
> doc, doc.getStore()); if( notification.isCanceled() ) { return; }
> doc.getStore().edit(FeatureStore.MODE_FULLEDIT);
> ApplicationLocator.getManager().refreshMenusAndToolBars();
> editingNotification.notifyObservers( this, EditingNotification.AFTER_ENTER_EDITING_STORE,
> doc, doc.getStore()); }
>
> De este modo sería viable recuperar una instancia de la extensión y llamar
> a doExecute, y aunque cambié la forma recomendada de comenzar la edición el
> código del resto de plugins seguirá cumpliendo.
>
> En el caso de la edición vectorial veo que esta parte se gestiona a través
> del EditingContext, pero hay una parte que no entiendo muy bien. En
> vectorial la notificación se monta de esta forma:
>
> EditingNotification notification = editingNotificationManager.
> notifyObservers(
>     this,
>     EditingNotification.BEFORE_ENTER_EDITING_STORE,
>     null,
>     layer);
>
> Por simetría con alfanumérico el parámetro "null" no debería ser "layer" o
> un ViewDocument si se trata de sobre que documento se actúa, y el parámetro
> "layer", no debería ser un "layer.getStore()". Viendo la API de
> EditionNotificationManager la verdad es que resulta un poco confuso
> entender para que vale cada parámetro o que esperan recibir los observers.
>
>


Me temo que ahora mismo hay lo que hay.
Te voy comentando.

La opcion de recuperar la instancia de una extension e
invocar a metodos de esta no es nada recomendable. Si no
hay mas remedio vale; pero en general lo suyo seria
invocar a la accion que toque. Por ejemplo, para comenzar
edicion sobre el documento tabla activo seria algo como:

  actionManager = PluginsLocator.getActionInfoManager()
  startEditing = actionManager.getAction("table-start-editing")
  startEditing.execute()

Lo del refactoring que sugieres para poder indicar el documento
tabla sobre el que deseas comenzar edicion, mas o menos, pero no
exactamente asi. Lo suyo seria poder usar algo como:

  actionManager = PluginsLocator.getActionInfoManager()
  startEditing = actionManager.getAction("table-start-editing")
  startEditing.execute(tableDocument)

Algunas acciones (muy poquitas) soportan parametros, esta en concreto
no, pero me tomo nota para añadirlo...
bueno voy a ver si lo meto...
...
ya esta.

Respecto a lo que comentas de las diferencias en los dos ultimos
parametros de editingNotificationManager.notifyObservers, pues si, no esta
nada claro, pero ahora mismo se va a quedar asi, cambiarlo puede ocasionar
que dejen de funcionar cosas que no puedo preveer. Simplemente aclarar que
el EditingContext deja a null el documento por que no lo conoce.
Probablemente lo que hubiese debido hacer es pasar a null el documento,
como hace ahora, y en lugar de la layer, pasar el store de la layer;
pero ahora no me atrevo a cambiar eso.

Voy a ver de tocar lo de edicion a ver si es posible pasar a la
notificacion,
ademas de la layer el store y asi los observadores lo tienen siempre tanto
si
se origino desde la tabla como desde la edicion grafica.
...
Parece que se ha dejado añadir.

Un saludo
Joaquin




> Luego a la hora de cerrar la edición pasa un poco lo mismo, pero aquí se
> acentúa porque tanto el EditingContext como el TableStopEditing lanzan por
> el medio ventanas preguntando cosas al usuario, y seguramente si estás
> programando tu propio plugin no es eso lo que buscas.
>
> _______________________________________________
> 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:
> https://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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20160905/4187df75/attachment.html>


Más información sobre la lista de distribución gvSIG_desarrolladores