<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">El 4 de septiembre de 2016, 20:09, Francisco Puga <span dir="ltr">&lt;<a target="_blank" href="mailto:fpuga@icarto.es">fpuga@icarto.es</a>&gt;</span> escribió:<br><blockquote style="margin-top:0px;margin-bottom:0px" class="gmail_quote"><div dir="ltr"><div>Hola,<br></div><div><br></div><div>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.</div><div><br></div><div>Por eso pregunto cual sería el método recomendado para &quot;Comenzar la edición&quot; 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.</div><div><br></div><div>Creo que podría ser interesante refactorizarlo, para tener un doExecute de este estilo:</div><div><br></div><div>public void execute(String actionCommand) {</div><div>    if (&quot;table-start-editing&quot;.equals(<wbr>actionCommand)) {</div><div>        try {</div><div>            TableDocument doc = (TableDocument) table.getDocument();</div><div>            doExecute(doc);</div><div>         } catch (DataException e) {</div><div>             logger.warn(&quot;Problems starting table editing.&quot;,e);</div><div>         }</div><div>     }</div><div>}</div><div><span style="white-space:pre-wrap">        </span></div><div><span style="white-space:pre-wrap">public void doExecute(TableDocument doc) throws DataException {
    EditingNotificationManager editingNotification = DALSwingLocator.<wbr>getEditingNotificationManager(<wbr>);
    EditingNotification notification = editingNotification.<wbr>notifyObservers(
            this,
            EditingNotification.BEFORE_<wbr>ENTER_EDITING_STORE,
            doc,
            doc.getStore());
    if( notification.isCanceled() ) {
        return;
    }
    doc.getStore().edit(<wbr>FeatureStore.MODE_FULLEDIT);
    ApplicationLocator.getManager(<wbr>).refreshMenusAndToolBars();
    editingNotification.<wbr>notifyObservers(
            this,
            EditingNotification.AFTER_<wbr>ENTER_EDITING_STORE,
            doc,
            doc.getStore());
}</span></div><div><span style="white-space:pre-wrap">        </span><br></div><div>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.</div><div><br></div><div>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:</div><div><br></div><div>EditingNotification notification = editingNotificationManager.<wbr>notifyObservers(</div><div>    this,</div><div>    EditingNotification.BEFORE_<wbr>ENTER_EDITING_STORE,</div><div>    null,</div><div>    layer);</div><div><br></div><div>Por simetría con alfanumérico el parámetro &quot;null&quot; no debería ser &quot;layer&quot; o un ViewDocument si se trata de sobre que documento se actúa, y el parámetro &quot;layer&quot;, no debería ser un &quot;layer.getStore()&quot;. 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.</div><div><br></div></div></blockquote><div><br><br><br>Me temo que ahora mismo hay lo que hay.<br>Te voy comentando.<br><br>La opcion de recuperar la instancia de una extension e <br>invocar a metodos de esta no es nada recomendable. Si no <br>hay mas remedio vale; pero en general lo suyo seria<br>invocar a la accion que toque. Por ejemplo, para comenzar<br>edicion sobre el documento tabla activo seria algo como:<br><br>  actionManager = PluginsLocator.getActionInfoManager()<br>  startEditing = actionManager.getAction(&quot;table-start-editing&quot;)<br>  startEditing.execute()<br><br>Lo del refactoring que sugieres para poder indicar el documento<br>tabla sobre el que deseas comenzar edicion, mas o menos, pero no <br>exactamente asi. Lo suyo seria poder usar algo como:<br><br>  actionManager = PluginsLocator.getActionInfoManager()<br>  startEditing = actionManager.getAction(&quot;table-start-editing&quot;)<br>  startEditing.execute(tableDocument)<br><br>Algunas acciones (muy poquitas) soportan parametros, esta en concreto <br>no, pero me tomo nota para añadirlo...  <br>bueno voy a ver si lo meto...<br>...<br>ya esta.<br><br>Respecto a lo que comentas de las diferencias en los dos ultimos <br>parametros de editingNotificationManager.notifyObservers, pues si, no esta<br>nada claro, pero ahora mismo se va a quedar asi, cambiarlo puede ocasionar <br>que dejen de funcionar cosas que no puedo preveer. Simplemente aclarar que <br>el EditingContext deja a null el documento por que no lo conoce.<br>Probablemente lo que hubiese debido hacer es pasar a null el documento,<br>como hace ahora, y en lugar de la layer, pasar el store de la layer;<br>pero ahora no me atrevo a cambiar eso.<br><br>Voy a ver de tocar lo de edicion a ver si es posible pasar a la notificacion,<br>ademas de la layer el store y asi los observadores lo tienen siempre tanto si <br>se origino desde la tabla como desde la edicion grafica.<br>...<br>Parece que se ha dejado añadir.<br><br>Un saludo<br>Joaquin<br><br><br> </div><blockquote style="margin-top:0px;margin-bottom:0px" class="gmail_quote"><div dir="ltr"><div></div><div>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.</div>
</div>
<br>______________________________<wbr>_________________<br>
gvSIG_desarrolladores mailing list<br>
<a href="mailto:gvSIG_desarrolladores@listserv.gva.es">gvSIG_desarrolladores@<wbr>listserv.gva.es</a><br>
Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: <a target="_blank" rel="noreferrer" href="https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores">https://listserv.gva.es/cgi-<wbr>bin/mailman/listinfo/gvsig_<wbr>desarrolladores</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature">--------------------------------------<br>Joaquin Jose del Cerro Murciano<br>Development and software arquitecture manager at gvSIG Team<br><a target="_blank" href="mailto:jjdelcerro@gvsig.com">jjdelcerro@gvsig.com</a><br><a target="_blank" href="mailto:jjdelcerro@gvsig.org">jjdelcerro@gvsig.org</a><br>gvSIG Association<br><a target="_blank" href="http://www.gvsig.com">www.gvsig.com</a><br><a target="_blank" href="http://www.gvsig.org">www.gvsig.org</a></div>
</div></div>