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();
}
}
}