Statistics
| Revision:

svn-gvsig-desktop / tags / v1_1_Build_1006 / libraries / libFMap / src / com / iver / cit / gvsig / fmap / edition / IEditableSource.java @ 12458

History | View | Annotate | Download (8.03 KB)

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

    
3
import java.io.IOException;
4

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

    
16

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

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

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

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

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

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

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

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

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

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

    
138

    
139

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

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

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

    
167
    /**
168
     * DOCUMENT ME!
169
     */
170
    void startComplexRow();
171

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

    
184
        public void addEditionListener(IEditionListener listener);
185

    
186
        public void removeEditionListener(IEditionListener listener);
187

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

    
190
        public void validateRow(IRow row, int sourceType) throws EditionException;
191

    
192
        /**
193
         *  Use it to add, remove or rename fields. If null, you cannot modifiy the table structure
194
         *  (for example, with dxf files, dgn files, etc).
195
         *  The changes will be applied when stopEditing() is called.
196
         */
197
        public IFieldManager getFieldManager();
198

    
199
        public void saveEdits(IWriter writer, int sourceType) throws EditionException;
200

    
201
        /**
202
         * @return
203
         */
204
        public Driver getOriginalDriver();
205

    
206
        /**
207
         * Please, use this if you need support for defaultValues.
208
         * Don't user getRecordset().getFieldsDescription()!!.
209
         * The reason is ResultSetMetadata has no information about
210
         * defaultValues in fields.
211
         * @return
212
         */
213
        public FieldDescription[] getFieldsDescription();
214

    
215

    
216
}