Statistics
| Revision:

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

History | View | Annotate | Download (7.59 KB)

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

    
3
import java.io.IOException;
4

    
5
import com.hardcode.driverManager.DriverLoadException;
6
import com.iver.cit.gvsig.fmap.DriverException;
7
import com.iver.cit.gvsig.fmap.core.IRow;
8
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
9
import com.iver.cit.gvsig.fmap.drivers.ITableDefinition;
10
import com.iver.cit.gvsig.fmap.edition.commands.CommandRecord;
11
import com.iver.cit.gvsig.fmap.layers.FBitSet;
12
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
13

    
14

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

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

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

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

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

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

    
86
    /**
87
     * Deshace la ?ltima acci?n realizada. Si no hay m?s acciones no realiza
88
     * ninguna acci?n
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 undo() throws DriverIOException, IOException;
95

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

    
104
    /**
105
     * Elimina una geometria. Si es una geometr?a original de la capa en
106
     * edici?n se marca como eliminada (haya sido modificada o no). Si es una
107
     * geometr?a a?adida posteriormente se invalida en el fichero de
108
     * expansi?n, para que una futura compactaci?n termine con ella.
109
     *
110
     * @param index ?ndice de la geometr?a que se quiere eliminar
111
     *
112
     * @throws DriverIOException Si se produce un error accediendo a las
113
     *         geometr?as originales
114
     * @throws IOException Si se produce un error con el fichero de expansi?n
115
     */
116
    void removeRow(int index,String descrip, int sourceType) throws DriverIOException, IOException;
117

    
118
    /**
119
     * Si se intenta modificar una geometr?a original de la capa en edici?n se
120
     * a?ade al fichero de expansi?n y se registra la posici?n en la que se
121
     * a?adi?. Si se intenta modificar una geometria que se encuentra en el
122
     * fichero de expansi?n (por ser nueva o original pero modificada) se
123
     * invoca el m?todo modifyGeometry y se actualiza el ?ndice de la
124
     * geometria en el fichero.
125
     *
126
     * @param index ?ndice de la geometr?a que se quiere eliminar
127
     * @param type TODO
128
     * @param g Geometr?a nueva
129
     * @throws IOException Si se produce un error con el fichero de expansi?n
130
     * @throws DriverIOException Si se produce un error accediendo a las
131
     *         geometr?as originales
132
     */
133
    int modifyRow(int index, IRow row,String descrip, int sourceType)
134
        throws IOException, DriverIOException;
135

    
136

    
137

    
138
    /**
139
     * Compacta el almacenamiento de las geometr?as que est?n en edici?n. Tras
140
     * esta operaci?n, el orden de las geometr?as seguramente cambiar? y toda
141
     * llamada a getGeometry devolver? una geometr?a distinta de null, ya que
142
     * las eliminadas son borradas definitivamente. Hay que tener especial
143
     * cuidado al invocar este m?todo ya que cualquier tipo de asociaci?n
144
     * entre geometr?as y otro tipo de objetos (comandos de edici?n, snapping,
145
     * ...) que use el ?ndice de la geometr?a se ver? afectado por ?ste m?todo
146
     */
147
    void compact();
148

    
149
    /**
150
     * Establece la imagen de las geometr?as seleccionadas con el fin de que en
151
     * una edici?n interactiva se pueda obtener dicha imagen para simular el
152
     * copiado, rotado, etc
153
     *
154
     * @param i imagen
155
     */
156
    // void setSelectionImage(Image i);
157

    
158
    /**
159
     * Obtiene una imagen con las geometr?as seleccionadas
160
     *
161
     * @return imagen
162
     */
163
    // Image getSelectionImage();
164

    
165
    /**
166
     * DOCUMENT ME!
167
     */
168
    void startComplexRow();
169

    
170
    void endComplexRow(String description) throws IOException, DriverIOException;
171
    public void undoModifyRow(int geometryIndex,int previousExpansionFileIndex, int sourceType) throws IOException, DriverIOException;
172
    public IRow doRemoveRow(int index, int sourceType)throws DriverIOException, IOException;
173
    public int doModifyRow(int index, IRow feat, int sourceType)throws IOException, DriverIOException;
174
    public int doAddRow(IRow feat, int sourceType) throws DriverIOException, IOException;
175
    public void undoRemoveRow(int index, int sourceType)throws IOException, DriverIOException;
176
    public void undoAddRow(int index, int sourceType)throws DriverIOException, IOException;
177
    public SelectableDataSource getRecordset() throws DriverLoadException;
178
    public boolean isEditing();
179
    public FBitSet getSelection();
180
    public CommandRecord getCommandRecord();
181

    
182
        public void addEditionListener(IEditionListener listener);
183

    
184
        public void removeEditionListener(IEditionListener listener);
185

    
186
        public ITableDefinition getTableDefinition() throws DriverLoadException, com.hardcode.gdbms.engine.data.driver.DriverException;
187

    
188
        public void validateRow(IRow row) throws EditionException;
189
        
190
        /**
191
         *  Use it to add, remove or rename fields. If null, you cannot modifiy the table structure
192
         *  (for example, with dxf files, dgn files, etc).
193
         *  The changes will be applied when stopEditing() is called.
194
         */
195
        public IFieldManager getFieldManager();
196
        
197
        public void saveEdits(IWriter writer, int sourceType) throws EditionException;
198

    
199

    
200
}