Personal tools
You are here: Home Development Documents gvSIG desktop 1.0 / 1.1 gvSIG Andami Servicios a los plugins Persistencia de datos (plugin-persistence.xml)
Document Actions

Persistencia de datos (plugin-persistence.xml)

by César Martínez Izquierdo last modified 2010-06-01 22:45
Existe un fichero (*plugin-persistence.xml*) en el que los plugins pueden almacenar información (ejemplos: un plugin de WMS podría almacenar la lista de servidores recientes; un plugin de nomenclátor podría almacenar las últimas búsquedas realizadas). De esta forma, al volver a arrancar gvSIG, los plugins pueden recuperar la información guardada y presentar (por ejemplo) la lista de servidores usados en la última sesión. Cada plugin sólo tiene acceso (de forma directa) a la información que él mismo produce. Debemos aclarar que este fichero es adecuado para guardar pequeñas cantidades de información de texto, pero no es adecuado para guardar otros tipos de información como miniaturas de la cartografía, un listado de nombres de municipios, etc.

El fichero se lee automáticamente durante el inicio de Andami, y se guarda automáticamente al salir de la aplicación. El fichero está en `formato XML `_, que almacena la información con una estructura de árbol. Para poder leer o escribir información en esta estructura, haremos uso del objeto XMLEntity, que representa una subrama del árbol (una subrama puede contener desde un único nodo hasta el árbol completo).

Para obtener la subrama asociada a nuestro plugin, utilizaremos:

.. code-block:: java

  XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();

Si suponemos que previamente habíamos almacenado una propiedad llamada "last.server", podemos recuperarla usando:

.. code-block:: java

  try {
    XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();
    String lastServer = entity.getStringProperty("last.server");
  }
  catch (NotExistInXMLEntity exception) {
    // mostrar el error y tomar alguna acción en respuesta
  }

Podemos ver el objeto XMLEntity como una especie de tabla Hash que asocia claves con valores. En el ejemplo anterior, "last.server" es una clave.

Para almacenar una nueva clave:

.. code-block:: java

  XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();
  entity.putProperty("last.server", "http://www.gvsig.org");

Es posible almacenar diversos tipos de objetos en el XMLEntity:

.. code-block:: java

  XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();
  entity.putProperty("last.server", "http://www.gvsig.org");
  entity.putProperty("maxConnections", 5);
  entity.putProperty("timeout", 3.258);
  String[] servers = {"http://www.gvsig.org","www.gvsig.gva.es","www.cit.gva.es"}
  entity.putProperty("preferred.servers", servers);
  int[] allowedValues = {1,2,5,10};
  entity.putProperty("allowed.values", allowedValues);

Y para recuperar estos objetos:

.. code-block:: java

  try {
    XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();
    String lastServer = entity.getStringProperty("last.server");
    int maxConnections =  entity.getProperty("maxConnections");
    float timeout = entity.getFloatProperty("timeout");
    String[] servers = entity.getStringArrayProperty("preferred.servers");
    int[] allowedValues = entity.getIntArrayProperty("allowed.values");
  }
  catch (NotExistInXMLEntity exception) {
    // mostrar el error y tomar alguna acción en respuesta
  }

Además, podemos anidar los objetos XMLEntity:

.. code-block:: java

  XMLEntity entity = PluginServices.getPluginServices(this).getPersistentXML();
  XMLEntity hijo = new XMLEntity();
  hijo.setName("ColorData");
  hijo.putProperty("red", "#ff0000");
  hijo.putProperty("green", "#00ff00");
  hijo.putProperty("blue", "#0000ff");
  hijo.putProperty("black", "#000000");
  hijo.putProperty("white", "#ffffff");
  entity.addChild(hijo);

Y para recuperar el XMLEntity anidado:

.. code-block:: java

  XMLEntity child=null, tmpchild; 
  for (int i=entity.getChildrenCount()-1; i>=0; i--) {
    tmpchild = entity.getChild(i);
    if (child.getName().equals("ColorData")) {
      child = tmpchild;
      break;
    }
  }

  if (child!=null) {
    try {
      String rojo = child.getStringProperty("red");
      String verde = child.getStringProperty("green");
      String azul = child.getStringProperty("blue");
      String negro = child.getStringProperty("black");
      String blanco = child.getStringProperty("white");
    }
    catch (NotExistInXMLEntity exception) {
      // mostrar el error y tomar alguna acción en respuesta
    }
  }

View source document


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards: