Buenos días.Tengo problemas para implementar el método refreshSelection en el 
siguiente código:

public boolean execute(PlugInContext context) throws Exception {                
                //************************************************************* 
//SELECCIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA 
//*************************************************************                 
                //recuperamos el encuadre de la vista activa            
Envelope encuadreActual = 
context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();      
                      //recuperamos la capa a partir de la selección del árbol  
              Layer selectedLayer = (Layer) context.getSelectedLayer(0);
                //recuperamos los elementos que cruzan con el encuadre actual   
        List<Layerable> layersToFilter = new ArrayList<Layerable>();            
layersToFilter.add(selectedLayer);              Geometry fence = 
EnvelopeUtil.toGeometry(encuadreActual);               Map 
layerToFeaturesInFenceMap =                 
context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter, fence);  
                                //seleccionamos los elementos           
refreshSelection(layerToFeaturesInFenceMap, context.getLayerViewPanel());       
               return true;}
Logger LOGGER = Logger.getLogger(CalculateSelectionPlugIn.class);boolean 
wasShiftPressed;AbstractSelection selection;
public void refreshSelection( Map layerToFeaturesInFenceMap, LayerViewPanel 
panel ) throws Exception {        Layer[] layers = new 
Layer[layerToFeaturesInFenceMap.keySet().size()];        
layerToFeaturesInFenceMap.keySet().toArray(layers);
        for( int i = 0; i < layers.length; i++ ) {                      Layer 
layer = layers[i];
            boolean originalPanelUpdatesEnabled = panel.getSelectionManager()   
                 .arePanelUpdatesEnabled();
            panel.getSelectionManager().setPanelUpdatesEnabled(false);
            try {                Collection featuresToSelect = (Collection) 
layerToFeaturesInFenceMap.get(layer);
                if (featuresToSelect == null)                    continue;      
          Collection featuresToUnselect = 
selection.getFeaturesWithSelectedItems(layer);                
featuresToUnselect.retainAll(featuresToSelect);
                selection.selectItems(layer, featuresToSelect);
                if (wasShiftPressed) {                    
selection.unselectItems(layer, featuresToUnselect);                }            
} finally {                
panel.getSelectionManager().setPanelUpdatesEnabled(originalPanelUpdatesEnabled);
            }        }
        panel.getSelectionManager().updatePanel();}

El proyecto compila sin problemas, pero a la hora de ejecutarlo en Kosmo me da 
una excepción sin mensaje asociado (Null Pointer Exception):
java.lang.NullPointerException  at 
org.saig.jump.plugin.proyecto.HelloWorldPlugIn.refreshSelection(HelloWorldPlugIn.java:167)
   at 
org.saig.jump.plugin.proyecto.HelloWorldPlugIn.execute(HelloWorldPlugIn.java:116)
    at 
com.vividsolutions.jump.workbench.plugin.AbstractPlugIn$1.actionPerformed(AbstractPlugIn.java:151)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)  
   at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)  
     at 
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
       at 
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)     at 
java.awt.Component.processMouseEvent(Component.java:6263)    at 
javax.swing.JComponent.processMouseEvent(JComponent.java:3267)       at 
java.awt.Component.processEvent(Component.java:6028) at 
java.awt.Container.processEvent(Container.java:2041) at 
java.awt.Component.dispatchEventImpl(Component.java:4630)    at 
java.awt.Container.dispatchEventImpl(Container.java:2099)    at 
java.awt.Component.dispatchEvent(Component.java:4460)        at 
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)       at 
java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)        at 
java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)    at 
java.awt.Container.dispatchEventImpl(Container.java:2085)    at 
java.awt.Window.dispatchEventImpl(Window.java:2478)  at 
java.awt.Component.dispatchEvent(Component.java:4460)        at 
java.awt.EventQueue.dispatchEvent(EventQueue.java:599)       at 
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at 
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)  
     at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)    
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)    
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Espero me puedan ayudar. Gracias de antemano y un saludo,Alex.



> Date: Mon, 7 Jun 2010 13:05:52 +0200
> From: [email protected]
> To: [email protected]
> Subject: Re: [Kosmo] Re: Consulta desarrollo
> 
> Buenas Alex.
> 
> Layer extiende AbstractLayerable (que a su vez implementa Layerable), 
> por lo que solo tienes que hacer el casting adecuado para que funcione ;):
> 
> Layer selectedLayer = (Layer)context.getSelectedLayer(0);
> 
> .........
> 
> List<Layerable> layersToFilter = new ArrayList<Layerable>();
> layersToFilter.add(selectedLayer);
> Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> Map layerToFeaturesInFenceMap = 
> context.getLayerViewPanel().layersToFeaturesInFenceMap(layersToFilter, 
> fence);
> 
> Saludos,
> 
> Alex Mtz. de Agirre Escobar escribió:
> > Muchas gracias por la respuesta.
> > He seguido las instrucciones, y he llegado al código que se muestra a 
> > continuación:
> >
> >
> > public boolean execute(PlugInContext context) throws Exception {
> > //******************
> > //MENSAJE DE DIALOGO
> > //******************
> > DialogFactory.showInformationDialog(context.getWorkbenchFrame(), 
> > "Proyecto de exportación a dxf...",
> > "Diálogo de información");
> > //*************************************************************
> > //SELEECIONAR LOS ELEMENTOS DE LA CAPA DEL RECUADRO DE LA VISTA
> > //*************************************************************
> > //recuperamos el encuadre de la vista activa
> > Envelope encuadreActual = 
> > context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > //recuperamos la capa a partir de la selección del árbol
> > Layer selectedLayer = _context.getSelectedLayer(0)_;  -->  _ERROR: 
> > "Type mismatch: cannot convert from Layerable to Layer"_
> >
> > //recuperamos los elementos que cruzan con el encuadre actual
> > List<Layer> layersToFilter = new ArrayList<Layer>();
> > layersToFilter.add(selectedLayer);
> > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > Map layerToFeaturesInFenceMap =
> > context.getLayerViewPanel()._layersToFeaturesInFenceMap_(layersToFilter, 
> > fence); --> _ERROR: "The method _ 
> > _layersToFeaturesInFenceMap(List<Layerable>, Geometry) in the type 
> > LayerViewPanel is not applicable _
> > _for the arguments (List<Layer>, Geometry)"_
> >
> >
> > Espero que me puedan ayudar con estos 2 errores.
> > Gracias de nuevo, y un saludo,
> > Alex. 
> >
> >
> >
> >
> > > Date: Mon, 7 Jun 2010 11:16:42 +0200
> > > From: [email protected]
> > > To: [email protected]
> > > Subject: [Kosmo] Re: Consulta desarrollo
> > >
> > > Buenos días Alex.
> > >
> > > Le comento una serie de puntos sobre la funcionalidad que quiere
> > > implementar:
> > >
> > > 1) En primer lugar, supondré que su herramienta será un PlugIn (es
> > > decir, que la clase implementa la interfaz PlugIn o extiende a 
> > alguna de
> > > sus subclases, como AbstractPlugIn o ThreadedPlugIn).
> > >
> > > 2) En el método execute de dicha herramienta debe incluir el código que
> > > debe ejecutarse al pulsar el botón de la misma en la interfaz de 
> > usuario
> > > (o, si la tarea que desea realizar es de "larga duración", deberá
> > > comprobarse en dicho método execute que se cumplen todas las
> > > precondiciones para la ejecución de la misma en el método run(),
> > > recuperando a su vez los datos que necesite).
> > >
> > > En este caso, lo primero que necesitará es recuperar el encuadre de la
> > > vista activa (no olvide incluir en el método getCheck() /
> > > createEnableCheck la comprobación de que debe existir una vista activa):
> > >
> > > Envelope encuadreActual =
> > > 
> > context.getLayerViewPanel().getViewport().getEnvelopeInModelCoordinates();
> > >
> > > 3) Una vez obtenida dicha referencia, sería necesario recuperar de qué
> > > capa/s se van a seleccionar los elementos. Dependiendo de la
> > > funcionalidad que desea implementar, puede obtener la referencia
> > > directamente (si sabe de antemano de qué capa debe recuperarla), o, si
> > > es una herramienta válida para cualquier capa, puede obtener la
> > > referencia a la capa mediante la selección de la misma en el árbol 
> > de capas:
> > >
> > > a) Referencia directa por nombre (sería recomendable incluir un chequeo
> > > de que la capa de nombre nombreDeMiCapa existe realmente):
> > >
> > > Layer selectedLayer = JUMPWorkbench.getLayer(nombreDeMiCapa);
> > >
> > > b) Recuperarla a partir de la selección del árbol (sería recomendable
> > > incluir un chequeo que compruebe que existe una capa vectorial y que
> > > está seleccionada en el árbol)
> > >
> > > Layer selectedLayer = context.getSelectedLayer(0);
> > >
> > > 4) Recuperamos los elementos que cruzan con el encuadre actual:
> > >
> > > List<Layer> layersToFilter = new ArrayList<Layer>();
> > > layersToFilter.add(selectedLayer);
> > > Geometry fence = EnvelopeUtil.toGeometry(encuadreActual);
> > > Map layerToFeaturesInFenceMap =
> > > context.getLayerViewPanel().layersToFeaturesInFenceMap(
> > > layersToFilter, fence);
> > >
> > > 5) Para seleccionar los elementos puedes consultar el método
> > > refreshSelection(layerToFeaturesInFenceMap, 
> > context.getLayerViewPanel())
> > > del plugin CalculateSelectionPlugIn.
> > >
> > > Saludos,
> > >
> > >
> > > Alex Mtz. de Agirre Escobar escribió:
> > > > Buenos días!
> > > >
> > > > Estoy teniendo algunos problemas a la hora de implementar una
> > > > herramienta propia sobre Kosmo.
> > > >
> > > > El primer paso que debe realizar dicha herramienta es seleccionar los
> > > > elementos de la capa activa que se encuentren en la ventana de
> > > > visualización de Kosmo. Para ello, debo de llamar al evento que
> > > > realiza el botón de selección, y posteriormente seleccionar los
> > > > elementos que se encuentren dentro de las coordenadas de la 
> > ventana de
> > > > visualización. De momento, me conformaría con lograr dicho
> > > > propósito. El error que tengo en mi código es que el constructor
> > > > /CalculateSelectionPlugIn/ no está definido.
> > > >
> > > > Si fuese posible, les agradecería que me ayudaran a solucionar dicho
> > > > contratiempo.
> > > >
> > > > Gracias de antemano,
> > > > Alex.
> > > >
> > > > 
> > ------------------------------------------------------------------------
> > > > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun
> > > > posta elektronikoko zerbitzua. Erregistratu orain.
> > > > <https://signup.live.com/signup.aspx?id=60969>
> > >
> > > --
> > >
> > > Sergio Baños Calvo
> > >
> > > Jefe de desarrollos
> > > Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> > > Tlfno. móvil: 685005960
> > > Tlfno. fijo: (+34) 954788876
> > >
> > > E-mail: [email protected]
> > >
> >
> > ------------------------------------------------------------------------
> > Eskura ezazu Windows Live Hotmail doanik, beti eskura edukiko duzun 
> > posta elektronikoko zerbitzua. Erregistratu orain. 
> > <https://signup.live.com/signup.aspx?id=60969>
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Kosmo mailing list
> > [email protected]
> > http://lists.saig.es/mailman/listinfo/kosmo
> >   
> 
> -- 
> 
> Sergio Baños Calvo
> 
> Jefe de desarrollos
> Sistemas Abiertos de Información Geográfica, S.L. (SAIG S.L.)
> Tlfno. móvil: 685005960
> Tlfno. fijo: (+34) 954788876
> 
> E-mail: [email protected]
> 
                                          
_________________________________________________________________
Hotmail: konfiantzazko posta elektronikoa, egon babesturik nahi ez dituzun 
mezuetatik.
https://signup.live.com/signup.aspx?id=60969
_______________________________________________
Kosmo mailing list
[email protected]
http://lists.saig.es/mailman/listinfo/kosmo

Responder a