Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / featuretable / table / EmptyFeatureTableModel.java @ 42775

History | View | Annotate | Download (11.6 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

    
25
package org.gvsig.fmap.dal.swing.impl.featuretable.table;
26

    
27
import java.security.InvalidParameterException;
28
import java.text.SimpleDateFormat;
29
import java.util.ArrayList;
30
import java.util.HashMap;
31
import java.util.List;
32
import java.util.Locale;
33
import java.util.Map;
34
import javax.swing.table.AbstractTableModel;
35

    
36
import org.gvsig.fmap.dal.DataTypes;
37
import org.gvsig.fmap.dal.feature.EditableFeature;
38
import org.gvsig.fmap.dal.feature.Feature;
39
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
40
import org.gvsig.fmap.dal.feature.FeatureQuery;
41
import org.gvsig.fmap.dal.feature.FeatureStore;
42
import org.gvsig.fmap.dal.feature.FeatureType;
43
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
44
import org.gvsig.tools.dynobject.DynStruct;
45
import org.gvsig.tools.exception.BaseException;
46
import org.gvsig.tools.observer.ComplexObserver;
47
import org.gvsig.tools.observer.Observable;
48
import org.slf4j.Logger;
49
import org.slf4j.LoggerFactory;
50

    
51
public class EmptyFeatureTableModel extends AbstractTableModel implements org.gvsig.fmap.dal.swing.FeatureTableModel,  ComplexObserver  {
52

    
53
    private static final long serialVersionUID = -8223987814719746492L;
54
    
55
    private static final Logger logger = LoggerFactory.getLogger(EmptyFeatureTableModel.class);
56

    
57
    private List<String> columnNames;
58

    
59
    private List<String> visibleColumnNames;
60

    
61
    private List<String> visibleColumnNamesOriginal;
62

    
63
    private Map<String, String> name2Alias;
64

    
65
    private Map<String, String> name2AliasOriginal;
66

    
67
    private Map<String,String> patterns = null;
68

    
69
    private Locale localeOfData;    
70

    
71
    private DynStruct struct = null;
72
    
73

    
74
    public EmptyFeatureTableModel(DynStruct struct) {
75
        this.struct = struct;
76
        this.localeOfData = Locale.getDefault();
77
        this.initialize();
78
    }
79

    
80
    private void initialize() {
81
        
82
        int columns = this.getOriginalColumnCount();
83

    
84
        // Initilize visible columns
85
        columnNames = new ArrayList<>(columns);
86
        visibleColumnNames = new ArrayList<>(columns);
87
        for (int i = 0; i < columns; i++) {
88
            String columnName = super.getColumnName(i);
89
            columnNames.add(columnName);
90

    
91
            // By default, geometry columns will not be visible
92
            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
93
            if (descriptor.getType() != DataTypes.GEOMETRY) {
94
                visibleColumnNames.add(columnName);
95
            }
96
        }
97
        visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
98
        
99
        // Initialize alias
100
        name2Alias = new HashMap<>(columns);
101
        name2AliasOriginal = new HashMap<>(columns);
102

    
103
        // Initialize formating patters
104
        this.patterns = new HashMap<>();
105
        for (int i = 0; i < columns; i++) {
106
            FeatureAttributeDescriptor descriptor = this.getInternalColumnDescriptor(i);
107
            String columnName = descriptor.getName();
108
            switch(descriptor.getDataType().getType()) {
109
            case DataTypes.BYTE:
110
            case DataTypes.INT:
111
            case DataTypes.LONG:
112
                String defaultIntegerPattern = "#,##0";
113
                this.patterns.put(columnName,defaultIntegerPattern);
114
                break;
115
            case DataTypes.DOUBLE:
116
            case DataTypes.FLOAT:
117
                String defaultDecimalPattern = "#,##0.000";
118
                this.patterns.put(columnName,defaultDecimalPattern);
119
                break;
120
            case DataTypes.DATE:
121
                String defaultDatePattern = new SimpleDateFormat().toPattern();
122
                this.patterns.put(columnName,defaultDatePattern);
123
                break;
124
            default:
125
                this.patterns.put(columnName,null);
126
            }
127
        }
128

    
129
        updatePagerWithHiddenColums();
130
    }
131

    
132
    private void updatePagerWithHiddenColums() {
133
        FeatureQuery query = this.getFeaturePager().getFeatureQuery();
134
        if (this.getFeaturePager().getFeatureStore().isEditing()) {
135
            if (query.hasConstantsAttributeNames()) {
136
                query.clearConstantsAttributeNames();
137
            }
138
        } else {
139
            query.setConstantsAttributeNames(this.getHiddenColumnNames());
140
        }
141
        try {
142
            this.getFeaturePager().reload();
143
        } catch (BaseException ex) {
144
            logger.warn("Can't reload paging-helper.", ex);
145
        }
146
    }
147
    
148
    @Override
149
    public FeaturePagingHelper getFeaturePager() {
150
        return null;
151
    }
152
        
153
    @Override
154
    public FeatureQuery getFeatureQuery() {
155
        return null;
156
    }
157

    
158
    @Override
159
    public FeatureType getFeatureType() {
160
        return null;
161
    }
162
    
163
    @Override
164
    public FeatureStore getFeatureStore() {
165
        return null;
166
    }
167

    
168
    @Override
169
    public int getColumnCount() {
170
        return visibleColumnNames.size();
171
    }
172

    
173
    public int getOriginalColumnCount() {
174
        return this.struct.getDynFields().length;
175
    }
176

    
177
    @Override
178
    public String getColumnName(int column) {
179
        String columName = getOriginalColumnName(column);
180
        return this.getColumnAlias(columName);
181
    }
182

    
183
    @Override
184
    public Class<?> getColumnClass(int columnIndex) {
185
        int originalIndex = getOriginalColumnIndex(columnIndex);
186
        
187
        // Return the class of the FeatureAttributeDescriptor for the value
188
        FeatureAttributeDescriptor attributeDesc = this.getInternalColumnDescriptor(originalIndex);
189
        if (attributeDesc == null) {
190
                return super.getColumnClass(originalIndex);
191
        }
192
        Class<?> clazz = attributeDesc.getObjectClass();
193
        return (clazz == null ? super.getColumnClass(originalIndex) : clazz);
194
    }
195

    
196
    @Override
197
    public FeatureAttributeDescriptor getColumnDescriptor(int columnIndex) {
198
        int originalIndex = getOriginalColumnIndex(columnIndex);
199
        return this.getInternalColumnDescriptor(originalIndex);
200
    }
201
    
202
    protected FeatureAttributeDescriptor getInternalColumnDescriptor(int columnIndex) {
203
        return new DynFieldFacadeOfAFeatureAttributeDescriptor(this.struct.getDynFields()[columnIndex]);
204
    }
205

    
206
    @Override
207
    public String getOriginalColumnName(int column) {
208
        return this.struct.getDynFields()[column].getName();
209
    }
210

    
211
    @Override
212
    public void setColumnVisible(String name, boolean visible) {
213
        // If we don't have already the column as visible,
214
        // add to the list, without order, and recreate
215
        // the visible columns list in the original order
216
        if (!columnNames.contains(name)) {
217
            throw new InvalidParameterException(name); // FIXME
218
        }
219
        if (visible && !visibleColumnNames.contains(name)) {
220
            visibleColumnNames.add(name);
221
            setVisibleColumns(visibleColumnNames);
222
        } else {
223
            visibleColumnNames.remove(name);
224
            setVisibleColumns(visibleColumnNames);
225
            fireTableStructureChanged();
226
        }
227

    
228
    }
229

    
230
    public void setFeatureType(FeatureType featureType) {
231
    }
232

    
233
    private void setVisibleColumns(List<String> names) {
234
        // Recreate the visible column names list
235
        // to maintain the original order        
236
        visibleColumnNames = new ArrayList<>(names.size());
237
        for (String columnName : columnNames) {
238
            if (names.contains(columnName)) {
239
                visibleColumnNames.add(columnName);
240
            }
241
        }
242
        updatePagerWithHiddenColums();
243
        fireTableStructureChanged();
244
    }
245

    
246
    protected String[] getHiddenColumnNames() {
247
        List<String> hiddenColumns = new ArrayList<>();
248
        hiddenColumns.addAll(columnNames);
249
        
250
        for (String columnName : visibleColumnNames) {
251
            hiddenColumns.remove(columnName);
252
        }
253
        if( hiddenColumns.size()<1 ) {
254
            return null;
255
        }
256
        return (String[]) hiddenColumns.toArray(new String[hiddenColumns.size()]);
257
    }
258
        
259
    /**
260
     * Changes all columns to be visible.
261
     */
262
    @Override
263
    public void setAllVisible() {
264
        visibleColumnNames.clear();
265
        visibleColumnNames.addAll(columnNames);
266
        fireTableStructureChanged();
267
    }
268

    
269
    @Override
270
    public void setColumnOrder(String name, boolean ascending)
271
        throws BaseException {
272
    }
273

    
274
    @Override
275
    public int getRowCount() {
276
        return 0;
277
    }
278

    
279
    @Override
280
    public boolean isColumnVisible(String name) {
281
        return visibleColumnNames.contains(name);
282
    }
283

    
284
    @Override
285
    public String getColumnAlias(String name) {
286
        String alias = name2Alias.get(name);
287
        return alias == null ? name : alias;
288
    }
289

    
290
    @Override
291
    public void setColumnAlias(String name, String alias) {
292
        name2Alias.put(name, alias);
293
        fireTableStructureChanged();
294
    }
295

    
296
    @Override
297
    public int getOriginalColumnIndex(int columnIndex) {
298
        String columnName = visibleColumnNames.get(columnIndex);
299
        return columnNames.indexOf(columnName);
300
    }
301

    
302
    @Override
303
    public Object getValueAt(int rowIndex, int columnIndex) {
304
        return null;
305
    }
306
    
307
    @Override
308
    public Feature getFeatureAt(int rowIndex) {
309
        return null;
310
    }    
311
    
312
    protected Object getFeatureValue(Feature feature, int columnIndex) {
313
        return null;
314
    }
315

    
316
    protected EditableFeature setFeatureValue(Feature feature, int columnIndex,
317
        Object value) {
318
        return null;
319
    }
320
    
321

    
322
    public void acceptChanges() {
323
            visibleColumnNamesOriginal = new ArrayList<>(visibleColumnNames);
324
            name2AliasOriginal = new HashMap<>(name2Alias);
325
    }
326
    
327
    public void cancelChanges() {
328
            visibleColumnNames = new ArrayList<>(visibleColumnNamesOriginal);
329
            name2Alias = new HashMap<>(name2AliasOriginal);
330
            fireTableStructureChanged();
331
    }
332

    
333
    
334
    @Override
335
    public String getColumnFormattingPattern(int column) {
336
        String columnName = this.visibleColumnNames.get(column);
337
        return this.getColumnFormattingPattern(columnName);
338
    }
339
    
340
    @Override
341
    public String getColumnFormattingPattern(String columnName) {
342
        String pattern = this.patterns.get(columnName);
343
        return pattern;
344
    }
345
    
346
    @Override
347
    public void setColumnFormattingPattern(String columnName, String pattern) {
348
        this.patterns.put(columnName,pattern);
349
    }
350
    
351
    @Override
352
    public Locale getLocaleOfData() {
353
        return this.localeOfData;
354
    }
355
    
356
    @Override
357
    public void setLocaleOfData(Locale locale) {
358
        this.localeOfData = locale;
359
    }
360
    
361
    @Override
362
    public boolean isSelectionLocked() {
363
        return false;
364
    }    
365

    
366
    @Override
367
    public boolean isSelectionUp() {
368
        return false;
369
    }    
370

    
371
    @Override
372
    public void setSelectionUp(boolean selectionUp) {
373
    }
374

    
375
    @Override
376
    public void update(final Observable observable, final Object notification) {
377
    }
378

    
379
    @Override
380
    public int getSelectionCount() {
381
        return 0;
382
    }
383
    
384
    
385
}