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

Francisco Puga fpuga en icarto.es
Lun Sep 5 11:04:49 CEST 2016


Genial. Gracias por los retoques.

El 5 de septiembre de 2016, 5:49, Joaquin Jose del Cerro Murciano <
jjdelcerro en gvsig.org> escribió:

>
>
> 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.not
>> ifyObservers(
>>     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
>
> _______________________________________________
> 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
>
>


-- 
Francisco Puga
iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.
http://www.icarto.es/

c/ Rafael Alberti nº 13 – 1º D
15008 A Coruña
Galicia (Spain)
+34 881927808

Este correo electrónico contiene información estrictamente confidencial y
es de uso exclusivo del destinatario, quedando prohibida a cualquier otra
persona su revelación, copia, distribución, o el ejercicio de cualquier
acción relativa a su contenido. Si ha recibido este mensaje por error, por
favor conteste a su remitente mediante correo electrónico y proceda a
borrarlo de su sistema.

Sus datos personales serán tratados de forma confidencial y no serán
cedidos a terceros ajenos a ICARTO. En cualquier caso, podrá ejercer los
derecho de oposición, acceso, rectificación y cancelación de acuerdo con lo
establecido en la Ley Orgánica 15/99, de 13 de diciembre, de Protección de
Datos de Carácter Personal dirigiéndose a Innovación, Cooperación,
Cartografía e Territorio, SL. (ICARTO) en la dirección postal a C/ Rafael
Alberti, nº 13, 1ºD, 15.008 – (A Coruña).
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20160905/e7c6ef9a/attachment.html>


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