com.iver.cit.gvsig.fmap.write
Class ExtensibleFile

java.lang.Object
  extended bycom.iver.cit.gvsig.fmap.write.ExtensibleFile

public class ExtensibleFile
extends java.lang.Object

Clase que representa el fichero donde se pueden meter features creadas por el usuario durante la edición. Si se elimina una geometría se marca como eliminada. La geometria sigue estando pero se devuelve una geometria nula si se accede a tal geometria. Si se añade, se añade al final del fichero y si se modifica se pone el shapetype a MODIFIED y a continuación del shapetype se pone el número de registro donde se inserta la modificación. Hay que destacar que un ExtensibleFile no deja de crecer. Si hay n features, y se eliminan 2, sigue habiendo n features, aunque algunas de ellas sean null. Esto se hace con la finalidad de que los índices en los que añaden las features no cambien por eliminaciones de otras features


Constructor Summary
ExtensibleFile()
           
 
Method Summary
 int addGeometry(IGeometry g)
          Añade una geometría al final del fichero y devuelve la posición que ocupa.
 void close()
          Cierra el fichero abierto con create
 void compact()
          Comprime el fichero ya que las features modificadas pueden estar encadenadas en más de un registro.
 int deleteGeometry(int id)
          Mete el índice en el bitset deleted para saber que dicho registro está eliminado
 IGeometry getShape(int index)
          Accede al registro index-ésimo del fichero y se cuenta el número de registros eliminados anteriores a dicho registro (n).
 int getShapeCount()
          Devuelve el número de registros del fichero contando los que ya han sido eliminados
 IGeometry modifyGeometry(int i, IGeometry g)
          Marca la feature i-esima del fichero como modificada (MODIFED), y a continuación del shapetype mete un entero con el número de registro de la feature modificada.
 void open()
          Crea un fichero temporal y lo abre para escritura
 void restoreGeometry(int i, int type)
          Deshace la eliminación de la geometría.
 void setGeometry(int index, IGeometry g)
          Añade la feature en la posición index del fichero.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ExtensibleFile

public ExtensibleFile()
Method Detail

open

public void open()
          throws DriverIOException
Crea un fichero temporal y lo abre para escritura

Throws:
DriverIOException

close

public void close()
           throws DriverIOException
Cierra el fichero abierto con create

Throws:
DriverIOException

deleteGeometry

public int deleteGeometry(int id)
Mete el índice en el bitset deleted para saber que dicho registro está eliminado


setGeometry

public void setGeometry(int index,
                        IGeometry g)
Añade la feature en la posición index del fichero. Puede darse que la posición no sea la última del fichero, en cuyo caso se copiará en dicho registro la geometría si cabe y lanzará una excepción en caso de que no pueda. Generalmente se debe de invocar éste método con un índice distinto al último en un marco de comandos con opción de deshacer.


addGeometry

public int addGeometry(IGeometry g)
Añade una geometría al final del fichero y devuelve la posición que ocupa. Dicha posición no es valida despues de que se haya eliminado alguna geometry del fichero.


modifyGeometry

public IGeometry modifyGeometry(int i,
                                IGeometry g)
Marca la feature i-esima del fichero como modificada (MODIFED), y a continuación del shapetype mete un entero con el número de registro de la feature modificada. Inserta la feature modificada al final del fichero. Llama al método addGeometry(int) para esto último. Retorna la geometry que se va a sustituir


restoreGeometry

public void restoreGeometry(int i,
                            int type)
Deshace la eliminación de la geometría. El parámetro que se pasa es el índice del registro eliminado.


compact

public void compact()
Comprime el fichero ya que las features modificadas pueden estar encadenadas en más de un registro.


getShape

public IGeometry getShape(int index)
                   throws DriverIOException
Accede al registro index-ésimo del fichero y se cuenta el número de registros eliminados anteriores a dicho registro (n). Se accede al registro (index+n) y se cuentan nuevamente el número de registros eliminados entre index y index+n (m). Se accede a (index+n+m) y asi sucesivamente, hasta que se estabiliza la operación. Entonces se lee el registro y si el shapetype es MODIFIED se salta a la dirección siguiente sucesivamente hasta que se encuentra el registro correcto.

Throws:
DriverIOException

getShapeCount

public int getShapeCount()
                  throws DriverIOException
Devuelve el número de registros del fichero contando los que ya han sido eliminados

Throws:
DriverIOException