Statistics
| Revision:

svn-gvsig-desktop / branches / org.gvsig.desktop-2018a / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / fmap / dal / serverexplorer / filesystem / swing / FilesystemExplorerWizardTableModel.java @ 43891

History | View | Annotate | Download (8.74 KB)

1
package org.gvsig.fmap.dal.serverexplorer.filesystem.swing;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import java.util.Objects;
6

    
7
import javax.swing.table.AbstractTableModel;
8
import org.cresques.cts.IProjection;
9
import org.gvsig.fmap.dal.DALLocator;
10
import org.gvsig.fmap.dal.DataManager;
11

    
12
import org.gvsig.fmap.dal.DataStoreParameters;
13
import org.gvsig.fmap.dal.DataStoreProviderFactory;
14
import org.gvsig.fmap.mapcontext.BaseCreateLayerParameters;
15
import org.gvsig.fmap.mapcontext.MapContext;
16
import org.gvsig.fmap.mapcontext.MapContextManager.CreateLayerParameters;
17
import org.gvsig.fmap.mapcontrol.swing.dynformfield.CoordinateReferenceSystem.DynFormContextWithTargetCRS;
18
import org.gvsig.tools.ToolsLocator;
19
import org.gvsig.tools.dynform.JDynForm.DynFormContext;
20
import org.gvsig.tools.i18n.I18nManager;
21

    
22

    
23
/**
24
 * @author fdiaz
25
 *
26
 */
27
public class FilesystemExplorerWizardTableModel extends AbstractTableModel {
28

    
29
    /**
30
     *
31
     */
32
    private static final long serialVersionUID = -1289509561088757725L;
33

    
34
    private static final int COLUMNS = 2;
35

    
36
    private static final int COLUMN_STORE_PARAMETERS = 0;
37
    private static final int COLUMN_TILED = 1;
38

    
39
    public static final String COLUMN_STORE_PARAMETERS_NAME = "Fichero";
40
    public static final String COLUMN_TILED_NAME = "_tiled";
41

    
42
    private List<FilesystemStoreCreateLayerParameters> data = null;
43
    private final MapContext mapContext;
44

    
45
    /**
46
     *
47
     * @param mapContext
48
     */
49
    public FilesystemExplorerWizardTableModel(MapContext mapContext) {
50
        this.data = new ArrayList<>();
51
        this.mapContext = mapContext;
52
    }
53

    
54
    @Override
55
    public int getColumnCount() {
56
        return COLUMNS;
57
    }
58

    
59
    @Override
60
    public int getRowCount() {
61
        return data.size();
62
    }
63

    
64

    
65
    @Override
66
    public Class<?> getColumnClass(int columnIndex) {
67
        switch (columnIndex) {
68
        case COLUMN_STORE_PARAMETERS:
69
            return FilesystemStoreCreateLayerParameters.class;
70
        case COLUMN_TILED:
71
            return Boolean.class;
72
        }
73
        return super.getColumnClass(columnIndex);
74
    }
75

    
76
    @Override
77
    public Object getValueAt(int i, int j) {
78
        if (i < data.size()) {
79
            FilesystemStoreCreateLayerParameters filesystemStoreParametersToLoad = (FilesystemStoreCreateLayerParameters) data.get(i);
80
            switch (j) {
81
            case COLUMN_STORE_PARAMETERS:
82
                return filesystemStoreParametersToLoad.getDataParameters();
83
            case COLUMN_TILED:
84
                return filesystemStoreParametersToLoad.useCache();
85
            }
86
        }
87
        return null;
88
    }
89

    
90
    @Override
91
    public String getColumnName(int col) {
92
        I18nManager i18nManager = ToolsLocator.getI18nManager();
93
        if(col < COLUMNS){
94
            switch (col) {
95
            case COLUMN_STORE_PARAMETERS:
96
                return i18nManager.getTranslation(COLUMN_STORE_PARAMETERS_NAME);
97
            case COLUMN_TILED:
98
                return i18nManager.getTranslation(COLUMN_TILED_NAME);
99
            default:
100
                break;
101
            }
102
        }
103
        throw new IndexOutOfBoundsException("Column '"+col+"' > "+COLUMNS);
104
    }
105

    
106
    @Override
107
    public boolean isCellEditable(int row, int col) {
108
        if (col == COLUMN_TILED && isEditableTiled(row) ) {
109
            return true;
110
        }
111
        return false;
112
    }
113

    
114
    @Override
115
    public void setValueAt(Object value, int row, int col) {
116
        if (row < data.size()) {
117
            if (col < COLUMNS) {
118
                FilesystemStoreCreateLayerParameters filesystemStoreParametersToLoad = data.get(row);
119
                switch (col) {
120
                case COLUMN_STORE_PARAMETERS:
121
                    if (value == null || !(value instanceof DataStoreParameters)) {
122
                        throw new IllegalArgumentException("The object '" + Objects.toString(value) + "' must be a FilesystemStoreParameters.");
123
                    }
124
                    filesystemStoreParametersToLoad.setDataStoreParameters((DataStoreParameters) value);
125
                    break;
126
                case COLUMN_TILED:
127
                    if (value == null) {
128
                        filesystemStoreParametersToLoad.setUseCache(false);
129
                        break;
130
                    }
131
                    if (!(value instanceof Boolean)) {
132
                        throw new IllegalArgumentException("The object '" + value.toString() + "' must be a Boolean.");
133
                    }
134
                    filesystemStoreParametersToLoad.setUseCache((boolean) value);
135
                    break;
136

    
137
                default:
138
                    break;
139
                }
140

    
141
            }
142
        }
143
    }
144

    
145
    /**
146
     * @param fileParams
147
     */
148
    public void add(DataStoreParameters fileParams){
149
        DataManager dataManager = DALLocator.getDataManager();
150
        DataStoreProviderFactory factory = dataManager.getStoreProviderFactory(fileParams.getDataStoreName());
151
        boolean editable = false;
152
        boolean tiled = false;
153
        if( factory != null ) {
154
            if( factory.getClass().getSimpleName().equalsIgnoreCase("TileProviderFactory")){
155
                editable = false;
156
                tiled = true;
157
            } else {
158
                switch (factory.isTiledSupported()) {
159
                case DataStoreProviderFactory.NO:
160
                    editable = false;
161
                    tiled = false;
162
                    break;
163
                case DataStoreProviderFactory.YES:
164
                    editable = true;
165
                    tiled = (factory.worksBestTiled()==DataStoreProviderFactory.YES);
166
                    break;
167
                case DataStoreProviderFactory.UNKNOWN:
168
                    //De momento, si no sabemos si se puede tilear lo marcamos como no
169
                    editable = false;
170
                    tiled = false;
171
                    break;
172
                default:
173
                    break;
174
                }
175
            }
176
        }
177
        FilesystemStoreCreateLayerParameters filesystemStoreParametersToLoad = new FilesystemStoreCreateLayerParameters(fileParams, tiled, editable) ;
178
        data.add(filesystemStoreParametersToLoad);
179
    }
180

    
181
    /**
182
     * @param listFileParams
183
     */
184
    public void add(List<DataStoreParameters> listFileParams){
185
        for (DataStoreParameters filesystemStoreParameters : listFileParams) {
186
            this.add(filesystemStoreParameters);
187
        }
188
    }
189

    
190
    /**
191
     * @param row
192
     */
193
    public void remove(int row){
194
        this.data.remove(row);
195
    }
196

    
197
    /**
198
     * @param row
199
     * @return FilesystemStoreParameters
200
     */
201
    public DataStoreParameters getDataParams(int row){
202
        return this.data.get(row).getDataParameters();
203
    }
204

    
205
    /**
206
     * @param row
207
     * @return boolean
208
     */
209
    public boolean isTiled(int row){
210
        return this.data.get(row).useCache();
211
    }
212

    
213
    /**
214
     * @param row
215
     * @return
216
     */
217
    public boolean isEditableTiled(int row){
218
        return this.data.get(row).isEditable();
219
    }
220
    /**
221
     * @param row
222
     */
223
    public void up(int row){
224
        if(row>0 && row<this.data.size()){
225
            FilesystemStoreCreateLayerParameters aux = this.data.get(row-1);
226
            this.data.set(row-1, this.data.get(row));
227
            this.data.set(row, aux);
228
        }
229
    }
230

    
231
    /**
232
     * @param row
233
     */
234
    public void down(int row){
235
        if(row>=0 && row<(this.data.size()-1)){
236
            FilesystemStoreCreateLayerParameters aux = this.data.get(row);
237
            this.data.set(row, this.data.get(row+1));
238
            this.data.set(row+1, aux);
239
        }
240
    }
241

    
242
    /**
243
     * @return DataStoreParameters[]
244
     */
245
    public CreateLayerParameters[] getParameters() {
246
        List<CreateLayerParameters> result = new ArrayList<>();
247
        for (FilesystemStoreCreateLayerParameters rowData : this.data) {
248
            result.add(rowData);
249
        }
250
        return result.toArray(new CreateLayerParameters[0]);
251
    }
252

    
253
    /**
254
     * @author fdiaz
255
     *
256
     */
257
    public class FilesystemStoreCreateLayerParameters 
258
        extends BaseCreateLayerParameters
259
        implements CreateLayerParameters, DynFormContext, DynFormContextWithTargetCRS
260
        {
261
        private boolean editable = false;
262

    
263
        /**
264
         * @param params
265
         */
266
        public FilesystemStoreCreateLayerParameters(DataStoreParameters params) {
267
            this(params,false,false);
268
        }
269

    
270
        /**
271
         * @param params
272
         * @param useCache
273
         * @param editable
274
         */
275
        public FilesystemStoreCreateLayerParameters(DataStoreParameters params, boolean useCache, boolean editable) {
276
            super(params,useCache, null);
277
            this.editable = editable;
278
        }
279

    
280
        public boolean isEditable() {
281
            return this.editable;
282
        }
283

    
284
        @Override
285
        public IProjection getTargetCRS() {
286
            return mapContext.getProjection();
287
        }
288

    
289
    }
290

    
291
}