45 |
45 |
*
|
46 |
46 |
* $Id$
|
47 |
47 |
* $Log$
|
48 |
|
* Revision 1.9 2006-01-23 17:30:28 caballero
|
|
48 |
* Revision 1.10 2006-01-30 08:18:14 caballero
|
|
49 |
* m?todos para deshacer y rehacer
|
|
50 |
*
|
|
51 |
* Revision 1.9 2006/01/23 17:30:28 caballero
|
49 |
52 |
* coger los datos del ova
|
50 |
53 |
*
|
51 |
54 |
* Revision 1.8 2006/01/23 16:16:16 caballero
|
... | ... | |
81 |
84 |
import java.io.IOException;
|
82 |
85 |
import java.util.HashMap;
|
83 |
86 |
import java.util.List;
|
|
87 |
import java.util.Vector;
|
84 |
88 |
|
85 |
89 |
import com.hardcode.driverManager.DriverLoadException;
|
86 |
90 |
import com.hardcode.gdbms.engine.data.DataSource;
|
... | ... | |
212 |
216 |
}
|
213 |
217 |
} else {
|
214 |
218 |
int num = ((Integer) relations.get(integer)).intValue();
|
215 |
|
IFeature feat = (IFeature) expansionFile.getRow(num);
|
|
219 |
IFeature feat = (IFeature) expansionFile.getRow(num).getLinkedRow();
|
216 |
220 |
return feat.getAttribute(fieldId);
|
217 |
221 |
}
|
218 |
222 |
} catch (DriverException e) {
|
... | ... | |
293 |
297 |
expansionFile=new MemoryExpansionFile();
|
294 |
298 |
cr=new MemoryCommandRecord();
|
295 |
299 |
this.ova = ova;
|
|
300 |
this.seleccion=new FBitSet();
|
296 |
301 |
}
|
297 |
302 |
/*
|
298 |
303 |
* (non-Javadoc)
|
... | ... | |
408 |
413 |
* @throws DriverIOException
|
409 |
414 |
* @throws IOException
|
410 |
415 |
*/
|
411 |
|
public int doAddRow(IRow feat) throws DriverIOException, IOException {
|
|
416 |
public int doAddFeature(IRow feat) throws DriverIOException, IOException {
|
412 |
417 |
// A?ade la geometr?a
|
413 |
418 |
int virtualIndex = ova.getShapeCount() + numAdd;
|
414 |
419 |
int pos = expansionFile.addRow(feat);
|
... | ... | |
514 |
519 |
}
|
515 |
520 |
|
516 |
521 |
public void addRow(IRow row) throws DriverIOException, IOException {
|
517 |
|
int virtualIndex = doAddRow(row);
|
|
522 |
int virtualIndex = doAddFeature(row);
|
518 |
523 |
|
519 |
524 |
if (complex) {
|
520 |
525 |
commands.add(new AddRowCommand(this, row, virtualIndex));
|
... | ... | |
664 |
669 |
* @throws DriverIOException
|
665 |
670 |
* @throws com.iver.cit.gvsig.fmap.DriverException
|
666 |
671 |
*/
|
667 |
|
public int doModifyFeature(int index, IFeature feat)
|
|
672 |
public int doModifyFeature(int index, IRow feat)
|
668 |
673 |
throws IOException, DriverIOException {
|
669 |
674 |
int pos = -1;
|
670 |
675 |
Integer integer = new Integer(index);
|
... | ... | |
681 |
686 |
featAnt = ova.getFeature(index);
|
682 |
687 |
|
683 |
688 |
Rectangle2D rAnt = featAnt.getGeometry().getBounds2D();
|
684 |
|
Rectangle2D r = feat.getGeometry().getBounds2D();
|
|
689 |
Rectangle2D r = ((IFeature)feat).getGeometry().getBounds2D();
|
685 |
690 |
this.index.remove(new Envelope(rAnt.getX(),
|
686 |
691 |
rAnt.getX() + rAnt.getWidth(), rAnt.getY(),
|
687 |
692 |
rAnt.getY() + rAnt.getHeight()), new Integer(index));
|
... | ... | |
697 |
702 |
int num = ((Integer) relations.get(integer)).intValue();
|
698 |
703 |
pos = num;
|
699 |
704 |
//Obtenemos la geometr?a para actualiza el ?ndice espacialposteriormente
|
700 |
|
featAnt = (IFeature) expansionFile.getRow(num);
|
|
705 |
featAnt = (IFeature) expansionFile.getRow(num).getLinkedRow();
|
701 |
706 |
/*
|
702 |
707 |
* Se modifica la geometr?a y nos guardamos el ?ndice dentro del fichero
|
703 |
708 |
* de expansi?n en el que se encuentra la geometr?a modificada
|
... | ... | |
711 |
716 |
|
712 |
717 |
//Se modifica el ?ndice espacial
|
713 |
718 |
Rectangle2D rAnt = featAnt.getGeometry().getBounds2D();
|
714 |
|
Rectangle2D r = feat.getGeometry().getBounds2D();
|
|
719 |
Rectangle2D r = ((IFeature)feat).getGeometry().getBounds2D();
|
715 |
720 |
this.index.remove(new Envelope(rAnt.getX(),
|
716 |
721 |
rAnt.getX() + rAnt.getWidth(), rAnt.getY(),
|
717 |
722 |
rAnt.getY() + rAnt.getHeight()), new Integer(index));
|
... | ... | |
738 |
743 |
|
739 |
744 |
return indexes;
|
740 |
745 |
}
|
|
746 |
/**
|
|
747 |
* @return
|
|
748 |
*/
|
|
749 |
public FBitSet getSelection() {
|
|
750 |
return seleccion;
|
|
751 |
}
|
|
752 |
/**
|
|
753 |
* Actualiza en el mapa de ?ndices, la posici?n en la que estaba la
|
|
754 |
* geometr?a antes de ser modificada. Se marca como v?lida, en caso de que
|
|
755 |
* fuera una modificaci?n de una geometr?a que estuviese en el fichero de
|
|
756 |
* expansi?n antes de ser modificada y se pone el puntero de escritura del
|
|
757 |
* expansion file a justo despues de la penultima geometr?a
|
|
758 |
*
|
|
759 |
* @param geometryIndex ?ndice de la geometr?a que se quiere deshacer su
|
|
760 |
* modificaci?n
|
|
761 |
* @param previousExpansionFileIndex ?ndice que ten?a antes la geometr?a en
|
|
762 |
* el expansionFile. Si vale -1 quiere decir que es una
|
|
763 |
* modificaci?n de una geometr?a original y por tanto no hay que
|
|
764 |
* actualizar el mapa de indices sino eliminar su entrada.
|
|
765 |
*
|
|
766 |
* @throws IOException
|
|
767 |
* @throws DriverIOException
|
|
768 |
*/
|
|
769 |
public void undoModifyRow(int geometryIndex,
|
|
770 |
int previousExpansionFileIndex) throws IOException, DriverIOException {
|
|
771 |
/*
|
|
772 |
* Si la acci?n de modificar se realiz? sobre una geometr?a original
|
|
773 |
*/
|
|
774 |
if (previousExpansionFileIndex == -1) {
|
|
775 |
//Se obtiene la geometr?a para actualizar el ?ndice
|
|
776 |
IGeometry g = getShape(geometryIndex);
|
|
777 |
Rectangle2D r = g.getBounds2D();
|
|
778 |
//Se elimina de las relaciones y del fichero de expansi?n
|
|
779 |
relations.remove(new Integer(geometryIndex));
|
|
780 |
expansionFile.deleteLastRow();
|
741 |
781 |
|
|
782 |
//Se actualizan los ?ndices
|
|
783 |
IGeometry gAnt = getShape(geometryIndex);
|
|
784 |
Rectangle2D rAnt = gAnt.getBounds2D();
|
|
785 |
this.index.remove(new Envelope(r.getX(), r.getX() + r.getWidth(),
|
|
786 |
r.getY(), r.getY() + r.getHeight()),
|
|
787 |
new Integer(geometryIndex));
|
|
788 |
this.index.insert(new Envelope(rAnt.getX(),
|
|
789 |
rAnt.getX() + rAnt.getWidth(), rAnt.getY(),
|
|
790 |
rAnt.getY() + rAnt.getHeight()), new Integer(geometryIndex));
|
|
791 |
} else {
|
742 |
792 |
|
|
793 |
//Se obtiene la geometr?a para actualizar el ?ndice
|
|
794 |
IGeometry g = null;
|
|
795 |
g = getShape(geometryIndex);
|
|
796 |
|
|
797 |
Rectangle2D r = g.getBounds2D();
|
|
798 |
this.index.remove(new Envelope(r.getX(), r.getX() + r.getWidth(),
|
|
799 |
r.getY(), r.getY() + r.getHeight()),
|
|
800 |
new Integer(geometryIndex));
|
|
801 |
|
|
802 |
//Se actualiza la relaci?n de ?ndices
|
|
803 |
Integer integer = new Integer(geometryIndex);
|
|
804 |
relations.put(new Integer(geometryIndex),
|
|
805 |
new Integer(previousExpansionFileIndex));
|
|
806 |
|
|
807 |
//Se recupera la geometr?a
|
|
808 |
expansionFile.validateRow(previousExpansionFileIndex);
|
|
809 |
|
|
810 |
//Se actualizan los ?ndices
|
|
811 |
g = getShape(geometryIndex);
|
|
812 |
r = g.getBounds2D();
|
|
813 |
this.index.insert(new Envelope(r.getX(), r.getX() + r.getWidth(),
|
|
814 |
r.getY(), r.getY() + r.getHeight()),
|
|
815 |
new Integer(geometryIndex));
|
|
816 |
}
|
|
817 |
}
|
|
818 |
/**
|
|
819 |
* Se desmarca como invalidada en el fichero de expansion o como eliminada
|
|
820 |
* en el fichero original
|
|
821 |
*
|
|
822 |
* @param index DOCUMENT ME!
|
|
823 |
*
|
|
824 |
* @throws IOException
|
|
825 |
* @throws DriverIOException
|
|
826 |
*/
|
|
827 |
public void undoRemoveRow(int index)
|
|
828 |
throws IOException, DriverIOException {
|
|
829 |
// Si la relaci?n
|
|
830 |
if (relations.containsKey(new Integer(index))) {
|
|
831 |
expansionFile.validateRow(((Integer) relations.get(
|
|
832 |
new Integer(index))).intValue());
|
|
833 |
} else {
|
|
834 |
delgeometries.set(index, false);
|
|
835 |
}
|
|
836 |
|
|
837 |
IGeometry g = null;
|
|
838 |
g = ((IFeature)getRow(index).getLinkedRow()).getGeometry();
|
|
839 |
|
|
840 |
Rectangle2D r = g.getBounds2D();
|
|
841 |
this.index.insert(new Envelope(r.getX(), r.getX() + r.getWidth(),
|
|
842 |
r.getY(), r.getY() + r.getHeight()), new Integer(index));
|
|
843 |
}
|
|
844 |
/**
|
|
845 |
* Se elimina del final del fichero de expansi?n poniendo el puntero de
|
|
846 |
* escritura apuntando al final de la pen?ltima geometr?a. Deber? quitar
|
|
847 |
* la relaci?n del mapa de relaciones
|
|
848 |
*
|
|
849 |
* @param index ?ndice de la geometr?a que se a?adi?
|
|
850 |
*
|
|
851 |
* @throws DriverIOException
|
|
852 |
* @throws IOException
|
|
853 |
*/
|
|
854 |
public void undoAddRow(int index)
|
|
855 |
throws DriverIOException, IOException {
|
|
856 |
//doRemoveGeometry(index);
|
|
857 |
IGeometry g = ((IFeature)getRow(index).getLinkedRow()).getGeometry();
|
|
858 |
Rectangle2D r = g.getBounds2D();
|
|
859 |
this.index.remove(new Envelope(r.getX(), r.getX() + r.getWidth(),
|
|
860 |
r.getY(), r.getY() + r.getHeight()), new Integer(index));
|
|
861 |
|
|
862 |
expansionFile.deleteLastRow();
|
|
863 |
relations.remove(new Integer(index));
|
|
864 |
numAdd--;
|
|
865 |
}
|
|
866 |
|
743 |
867 |
}
|