Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / IEditableSource.java @ 3996

History | View | Annotate | Download (7.13 KB)

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

    
3
import java.awt.Image;
4
import java.awt.geom.Rectangle2D;
5
import java.io.IOException;
6

    
7
import com.hardcode.driverManager.DriverLoadException;
8
import com.hardcode.gdbms.engine.data.DataSource;
9
import com.iver.cit.gvsig.fmap.core.IRow;
10
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
11
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
12

    
13

    
14
/**
15
 * DOCUMENT ME!
16
 *
17
 * @author $author$
18
 */
19
public interface IEditableSource {
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(IWriter writer) throws EditionException;
39

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

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

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

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

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

    
95
    /**
96
     * Rehace la ?ltima acci?n deshecha. Si no hay m?s acciones no hace nada
97
     *
98
     * @throws DriverIOException Si se produce un error accediendo a las
99
     *         filas originales
100
     */
101
    void redo() throws DriverIOException, IOException;
102

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

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

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

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

    
153

    
154

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

    
166
    /**
167
     * Establece la imagen de las geometr?as seleccionadas con el fin de que en
168
     * una edici?n interactiva se pueda obtener dicha imagen para simular el
169
     * copiado, rotado, etc
170
     *
171
     * @param i imagen
172
     */
173
    void setImage(Image i);
174

    
175
    /**
176
     * Obtiene una imagen con las geometr?as seleccionadas
177
     *
178
     * @return imagen
179
     */
180
    Image getImage();
181

    
182
    /**
183
     * DOCUMENT ME!
184
     */
185
    void startComplexRow();
186

    
187
    /**
188
     * DOCUMENT ME!
189
     *
190
     * @throws IOException DOCUMENT ME!
191
     * @throws DriverIOException DOCUMENT ME!
192
     */
193
    void endComplexRow() throws IOException, DriverIOException;
194
    public void undoModifyRow(int geometryIndex,int previousExpansionFileIndex) throws IOException, DriverIOException;
195
    public void doRemoveRow(int index)throws DriverIOException, IOException;
196
    public int doModifyRow(int index, IRow feat)throws IOException, DriverIOException;
197
    public int doAddRow(IRow feat) throws DriverIOException, IOException;
198
    public void undoRemoveRow(int index)throws IOException, DriverIOException;
199
    public void undoAddRow(int index)throws DriverIOException, IOException;
200
    public SelectableDataSource getRecordset() throws DriverLoadException;
201
    public boolean isEditing();
202
}