[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