4.1.5. La selección dentro de los datos de un almacén

Sobre la selección de datos de un almacén, en este apartado se trata:

  • Cómo acceder a la selección de un almacén.
  • Cómo cambiar la selección de un almacén por otra.
  • Operaciones que se pueden realizar con la selección.
  • Recepción de eventos de selección.

El acceso a la selección de un almacén se realiza a través del método getSelection del almacén:

FeatureSelection selection = store.getFeatureSelection();

Si no queremos trabajar directamente con la selección del almacén, podemos crear una selección nueva a través del propio almacén:

FeatureSelection selection2 = store.createFeatureSelection();

Si queremos sustituir la selección del almacén por otra bastará con establecerla:

store.setSelection(selection2);

Una vez obtenida la selección, a través de ella podemos realizar las siguientes operaciones:

  • Seleccionar o de seleccionar un fenómeno, un FeatureSet o todos los fenómenos del almacén.
  • Averiguar si un fenómeno está seleccionado.
  • Invertir la selección.
  • Obtener los fenómenos seleccionados o de seleccionados, ya que el FeatureSelection es, a su vez, un FeatureSet.

Ej:

Feature feature = ...

// Seleccionamos un fenómeno
selection.select(feature);

// Devolverá true
selection.isSelected(feature);

// Invertimos la selección
selection.reverse();

// Devolverá false
selection.isSelected(feature);

// Seleccionamos todos
selection.selectAll();

// Devolverá true
selection.isSelected(feature);

// Deseleccionamos el fenómeno
selection.deselect(feature);

// Devolverá false
selection.isSelected(feature);

Si lo que queremos es recibir eventos sobre cambios en la selección, podemos suscribirnos como Observer al almacén directamente, de forma que recibiremos, entre otros eventos, el evento DataStoreNotification.SELECTION_CHANGE .SELECTION_CHANGE.

Por ejemplo, la tabla que muestra una lista de fenómenos, debe repintarse para actualizar las filas seleccionadas cuando cambia la selección en el almacén correspondiente. Para ello implementa Observer y se registra como tal en el almacén. Su método update es como sigue:

public void update(Observable observable, Object notification) {
    if (notification instanceof FeatureStoreNotification) {
        FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
        String type = fsNotification.getType();
        // If the selection has changed, repaint the table to show the new
        // selected rows
        if (FeatureStoreNotification.SELECTION_CHANGE.equals(type)) {
            repaint();
        }
    }
}