Statistics
| Revision:

root / branches / pilotoDWG / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / EditableFeatureSource.java @ 1556

History | View | Annotate | Download (5.96 KB)

1
package com.iver.cit.gvsig.fmap.edition;
2

    
3
import com.iver.cit.gvsig.fmap.core.IGeometry;
4
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
5

    
6
import com.vividsolutions.jts.geom.Envelope;
7

    
8
import java.awt.Image;
9
import java.awt.geom.Rectangle2D;
10

    
11
import java.io.IOException;
12

    
13

    
14
/**
15
 * DOCUMENT ME!
16
 *
17
 * @author $author$
18
 */
19
public interface EditableFeatureSource {
20
        /**
21
         * M?todo invocado cuando se comienza la edici?n, para poner en marcha las
22
         * estructuras de datos necesarias para la misma, notificar al servidor en
23
         * protocolos en los que sea necesario, ...
24
         *
25
         * @throws EditionException Si no se logra poner la fuente de datos en
26
         *                    edici?n
27
         */
28
        void startEdition() throws EditionException;
29

    
30
        /**
31
         * Invocado cuando termina la edici?n. En funci?n de la clase concreta que
32
         * implemente este m?todo se generar? el fichero con los resultados de la
33
         * edici?n, se realizar? una transacci?n a la base de datos, etc.
34
         *
35
         * @throws EditionException Si no se consiguen llevar a cabo las
36
         *                    modificaciones
37
         */
38
        void stopEdition() throws EditionException;
39

    
40
        /**
41
         * Si el ?ndice se corresponde a una geometria de las originales de la capa
42
         * en edici?n y no ha sido modificada ni eliminada devuelve la geometria
43
         * original. Si ha sido modificada debera de buscar en el fichero de
44
         * expansi?n y si ha sido eliminada debera devolver null
45
         *
46
         * @param index ?ndice de la geometr?a.
47
         *
48
         * @return Geometr?a.
49
         *
50
         * @throws IOException Si se produce un error con el fichero de expansi?n
51
         * @throws DriverIOException Si se produce un error accediendo a las
52
         *                    geometr?as originales
53
         */
54
        IGeometry getGeometry(int index) throws IOException, DriverIOException;
55

    
56
        /**
57
         * Devuelve el n?mero de geometrias que hay actualmente en edici?n.
58
         *
59
         * @return N?mero de geometr?as.
60
         *
61
         * @throws DriverIOException Si se produce un error accediendo a la capa
62
         */
63
        int getGeometryCount() throws DriverIOException;
64

    
65
        /**
66
         * A?ade una geometria al fichero de expansi?n y guarda la correspondencia
67
         * en una tabla asociada.
68
         *
69
         * @param g geometr?a a guardar.
70
         *
71
         * @throws DriverIOException Si se produce un error accediendo a las
72
         *                    geometr?as originales
73
         * @throws IOException Si se produce un error con el fichero de expansi?n
74
         */
75
        void addGeometry(IGeometry g) throws DriverIOException, IOException;
76

    
77
        /**
78
         * Deshace la ?ltima acci?n realizada. Si no hay m?s acciones no realiza
79
         * ninguna acci?n
80
         *
81
         * @throws DriverIOException Si se produce un error accediendo a las
82
         *                    geometr?as originales
83
         * @throws IOException Si se produce un error con el fichero de expansi?n
84
         */
85
        void undo() throws DriverIOException, IOException;
86

    
87
        /**
88
         * Rehace la ?ltima acci?n deshecha. Si no hay m?s acciones no hace nada
89
         *
90
         * @throws DriverIOException Si se produce un error accediendo a las
91
         *                    geometr?as originales
92
         * @throws IOException Si se produce un error con el fichero de expansi?n
93
         */
94
        void redo() throws DriverIOException, IOException;
95

    
96
        /**
97
         * Devuelve true si se puede deshacer un comando invocando undo
98
         * o si por el contrario se ha llegado al principio de la lista
99
         * de comandos y ya no se pueden deshacer m?s comandos
100
         *
101
         * @return boolean
102
         */
103
        boolean moreUndoCommands();
104

    
105
        /**
106
         * Devuelve true si se puede rehacer un comando invocando redo
107
         * o si por el contrario se est? al final de la lista de comandos
108
         * y ya no se pueden deshacer m?s comandos
109
         *
110
         * @return boolean
111
         */
112
        boolean moreRedoCommands();
113

    
114
        /**
115
         * Elimina una geometria. Si es una geometr?a original de la capa en
116
         * edici?n se marca como eliminada (haya sido modificada o no). Si es una
117
         * geometr?a a?adida posteriormente se invalida en el fichero de
118
         * expansi?n, para que una futura compactaci?n termine con ella.
119
         *
120
         * @param index ?ndice de la geometr?a que se quiere eliminar
121
         *
122
         * @throws DriverIOException Si se produce un error accediendo a las
123
         *                    geometr?as originales
124
         * @throws IOException Si se produce un error con el fichero de expansi?n
125
         */
126
        void removeGeometry(int index) throws DriverIOException, IOException;
127

    
128
        /**
129
         * Si se intenta modificar una geometr?a original de la capa en edici?n se
130
         * a?ade al fichero de expansi?n y se registra la posici?n en la que se
131
         * a?adi?. Si se intenta modificar una geometria que se encuentra en el
132
         * fichero de expansi?n (por ser nueva o original pero modificada) se
133
         * invoca el m?todo modifyGeometry y se actualiza el ?ndice de la
134
         * geometria en el fichero.
135
         *
136
         * @param index ?ndice de la geometr?a que se quiere eliminar
137
         * @param g Geometr?a nueva
138
         *
139
         * @throws IOException Si se produce un error con el fichero de expansi?n
140
         * @throws DriverIOException Si se produce un error accediendo a las
141
         *                    geometr?as originales
142
         */
143
        void modifyGeometry(int index, IGeometry g)
144
                throws IOException, DriverIOException;
145

    
146
        /**
147
         * Obtiene las geometr?as que se encuentran en el rect?ngulo que se pasa
148
         * como par?metro haciendo uso del ?ndice espacial
149
         *
150
         * @param r Rect?ngulo indicando la porci?n del espacio para el cual se
151
         *                   quiere saber los ?ndices de las geometr?as que se encuentran
152
         *                   dentro de ?l
153
         *
154
         * @return Array de ?ndices para su uso con getGeometry, removeGeometry,
155
         *                    ...
156
         */
157
        int[] getGeometriesIndexes(Rectangle2D r);
158

    
159
        /**
160
         * Compacta el almacenamiento de las geometr?as que est?n en edici?n. Tras
161
         * esta operaci?n, el orden de las geometr?as seguramente cambiar? y toda
162
         * llamada a getGeometry devolver? una geometr?a distinta de null, ya que
163
         * las eliminadas son borradas definitivamente. Hay que tener especial
164
         * cuidado al invocar este m?todo ya que cualquier tipo de asociaci?n
165
         * entre geometr?as y otro tipo de objetos (comandos de edici?n, snapping,
166
         * ...) que use el ?ndice de la geometr?a se ver? afectado por ?ste m?todo
167
         */
168
        void compact();
169

    
170
        /**
171
         * DOCUMENT ME!
172
         *
173
         * @param i DOCUMENT ME!
174
         */
175
        void setImage(Image i);
176

    
177
        /**
178
         * DOCUMENT ME!
179
         *
180
         * @return DOCUMENT ME!
181
         */
182
        Image getImage();
183

    
184
        /**
185
         * DOCUMENT ME!
186
         *
187
         * @return DOCUMENT ME!
188
         */
189
        public CommandRecord getCommandRecord();
190
}