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

Francisco Puga fpuga en icarto.es
Dom Sep 4 20:09:36 CEST 2016


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.

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.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20160904/107ed774/attachment.html>


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