Statistics
| Revision:

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

History | View | Annotate | Download (6.91 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 java.awt.Image;
7
import java.awt.geom.Rectangle2D;
8

    
9
import java.io.IOException;
10

    
11

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

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

    
38
    /**
39
     * Cancela la edici?n sin escribir los cambios
40
     *
41
     * @throws IOException Si se produce un error
42
     */
43
    void cancelEdition() throws IOException;
44

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

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

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

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

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

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

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

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

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

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

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

    
175
    /**
176
     * Establece la imagen de las geometr?as seleccionadas con el fin de que en
177
     * una edici?n interactiva se pueda obtener dicha imagen para simular el
178
     * copiado, rotado, etc
179
     *
180
     * @param i imagen
181
     */
182
    void setImage(Image i);
183

    
184
    /**
185
     * Obtiene una imagen con las geometr?as seleccionadas
186
     *
187
     * @return imagen
188
     */
189
    Image getImage();
190

    
191
    /**
192
     * DOCUMENT ME!
193
     */
194
    void startComplexGeometry();
195

    
196
    /**
197
     * DOCUMENT ME!
198
     *
199
     * @throws IOException DOCUMENT ME!
200
     * @throws DriverIOException DOCUMENT ME!
201
     */
202
    void endComplexGeometry() throws IOException, DriverIOException;
203
}