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 / DefaultDataSwingManager.java @ 44662

History | View | Annotate | Download (15.3 KB)

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

    
25
import java.util.Collection;
26
import java.util.Collections;
27
import java.util.LinkedHashMap;
28
import java.util.List;
29
import java.util.Map;
30
import java.util.function.Predicate;
31
import javax.swing.AbstractButton;
32
import javax.swing.Action;
33
import javax.swing.JButton;
34
import javax.swing.JComboBox;
35
import javax.swing.JList;
36
import javax.swing.JTextField;
37
import javax.swing.ListCellRenderer;
38
import javax.swing.table.TableModel;
39
import javax.swing.text.JTextComponent;
40
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
41
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
42
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
43
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
44
import org.gvsig.featureform.swing.CreateJFeatureFormException;
45
import org.gvsig.featureform.swing.JFeatureForm;
46

    
47
import org.gvsig.featureform.swing.JFeaturesForm;
48
import org.gvsig.featureform.swing.impl.DefaultJFeatureForm;
49
import org.gvsig.featureform.swing.impl.DefaultJFeaturesForm;
50
import org.gvsig.fmap.dal.DALLocator;
51
import org.gvsig.fmap.dal.DataManager;
52
import org.gvsig.fmap.dal.DataStoreProviderFactory;
53
import org.gvsig.fmap.dal.exception.DataException;
54
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
55
import org.gvsig.fmap.dal.feature.Feature;
56
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
57
import org.gvsig.fmap.dal.feature.FeatureQuery;
58
import org.gvsig.fmap.dal.feature.FeatureStore;
59
import org.gvsig.fmap.dal.feature.FeatureType;
60
import org.gvsig.fmap.dal.feature.FeatureTypeDefinitionsManager;
61
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
62
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
63
import org.gvsig.fmap.dal.swing.DataSwingManager;
64
import org.gvsig.fmap.dal.swing.FeatureTableModel;
65
import org.gvsig.fmap.dal.swing.JFeatureTable;
66
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
67
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
68
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
69
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
70
import org.gvsig.fmap.dal.swing.impl.expressionevaluator.DefaultFeatureStoreElement2;
71
import org.gvsig.fmap.dal.swing.impl.featuretable.FeatureTablePanel;
72
import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
73
import org.gvsig.fmap.dal.swing.impl.featuretable.table.EmptyFeatureTableModel;
74
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultAttributeDescriptorPickerController;
75
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypeAttributePanel;
76
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypePanel;
77
import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionPanel;
78
import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
79
import org.gvsig.fmap.dal.swing.impl.actions.SelectionAddAction.SelectionAddActionFactory;
80
import org.gvsig.fmap.dal.swing.impl.actions.SelectionFilterAction.SelectionFilterActionFactory;
81
import org.gvsig.fmap.dal.swing.impl.actions.SelectionSetAction.SelectionSetActionFactory;
82
import org.gvsig.fmap.dal.swing.impl.actions.ShowFormAction.ShowFormActionFactory;
83
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
84
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
85
import org.gvsig.tools.dynform.DynFormLocator;
86
import org.gvsig.tools.dynobject.DynClass;
87
import org.gvsig.tools.dynobject.DynStruct;
88
import org.gvsig.tools.exception.BaseException;
89
import org.gvsig.fmap.dal.swing.DALActionFactory;
90
import org.gvsig.fmap.dal.swing.DALActionFactory.DALActionContext;
91
import org.gvsig.fmap.dal.swing.impl.featuretable.SimpleFeaturesTableModel;
92
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureAttributeListCellRenderer;
93
import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionDialog;
94
import org.gvsig.fmap.dal.swing.impl.jdbc.JDBCConnectionPickerController;
95
import org.gvsig.fmap.dal.swing.impl.orderpanel.DefaultFeatureStoreOrderPanel;
96
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
97
import org.gvsig.fmap.dal.swing.orderpanel.FeatureStoreOrderPanel;
98
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
99

    
100

    
101
/**
102
 * @author fdiaz
103
 *
104
 */
105
@SuppressWarnings("UseSpecificCatch")
106
public class DefaultDataSwingManager implements DataSwingManager {
107

    
108
    private final Map<String,DALActionFactory> featureStoreSearchActions;
109
    
110
    public DefaultDataSwingManager() {
111
        this.featureStoreSearchActions = new LinkedHashMap<>();
112
        this.registerStoreAction(new SelectionAddActionFactory());
113
        this.registerStoreAction(new SelectionFilterActionFactory());
114
        this.registerStoreAction(new SelectionSetActionFactory());
115
        this.registerStoreAction(new ShowFormActionFactory());
116
    }
117
    
118
    @Override
119
    public JFeaturesForm createJFeaturesForm(FeatureStore store) throws CreateJFeatureFormException {
120
        try {
121
            FeatureType featureType = store.getDefaultFeatureType();
122
            
123
            DefaultJFeaturesForm form = new DefaultJFeaturesForm();
124
            form.bind(store, featureType2DynClass(store, featureType));
125
            return form;
126
            
127
        } catch (Exception ex) {
128
            throw new CreateJFeatureFormException(ex);
129
        }
130
    }
131

    
132
    public DynClass featureType2DynClass(FeatureStore store, FeatureType type) {
133
        FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
134
        if( featureTypeDefinitionsManager.contains(store,type) ) {
135
            // Force reload next call to get.
136
            featureTypeDefinitionsManager.remove(store,type);
137
        }
138
        DynClass dynClass = featureTypeDefinitionsManager.get(store,type);
139
        // Force reload next call to get.
140
        DynFormLocator.getDynFormManager().removeDefinition(dynClass.getName());
141
        return dynClass;
142
    }
143
    
144
    @Override
145
    public JDBCConnectionPanel createJDBCConnectionPanel() {
146
        JDBCConnectionPanel x = new DefaultJDBCConnectionPanel();
147
        return x;
148
    }
149

    
150
    @Override
151
    public JDBCConnectionDialog createJDBCConectionDialog() {
152
        JDBCConnectionDialog x = new DefaultJDBCConnectionDialog();
153
        return x;
154
    }
155

    
156
    @Override
157
    public JExpressionBuilder createQueryFilterExpresion(FeatureStore store) {
158
        DataManager dataManager = DALLocator.getDataManager();
159
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
160
        FeatureSymbolTable featureSymbolTable = dataManager.createFeatureSymbolTable();
161

    
162
        Feature sampleFeature = null;
163
        try {
164
            sampleFeature = store.getFeatureSelection().first();
165
            if( sampleFeature == null ) {
166
                sampleFeature = store.first();
167
            }
168
        } catch (DataException ex) {
169
        }      
170
        final JExpressionBuilder builder = swingManager.createJExpressionBuilder();
171
        if( sampleFeature!=null ) {
172
            featureSymbolTable.setFeature(sampleFeature);
173
            builder.setPreviewSymbolTable(featureSymbolTable.createParent());
174
        }
175
        builder.addSymbolTable(featureSymbolTable);
176
        FeatureStoreElement storeElement = new DefaultFeatureStoreElement2(store);
177
        builder.addElement(storeElement);
178
        if( store.getProviderFactory().hasSQLSupport()==DataStoreProviderFactory.YES ) {
179
            builder.getPreferences().setSQLCompatible(true);
180
        }
181
        builder.expandElement(storeElement);
182
        return builder;
183
    }
184

    
185
    @Override
186
    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException {
187
        JFeatureForm form = new DefaultJFeatureForm();
188
        form.setStore(store);
189
        return form;
190
    }
191

    
192
    @Override
193
    public JFeatureForm createJFeatureForm(Feature feature) throws CreateJFeatureFormException {
194
        JFeatureForm form = new DefaultJFeatureForm();
195
        form.setFeature(feature);
196
        return form;
197
    }
198

    
199
    @Override
200
    public JFeatureTable createJFeatureTable(FeatureTableModel model) {
201
        return this.createJFeatureTable(model, true);
202
    }
203
    
204
    @Override
205
    public JFeatureTable createJFeatureTable(FeatureTableModel model, boolean isDoubleBuffered) {
206
        return new FeatureTablePanel(model, isDoubleBuffered);
207
    }
208
    
209
    @Override
210
    public FeatureTableModel createEmptyFeatureTableModel(DynStruct struct) {
211
        return new EmptyFeatureTableModel(struct);
212
    }
213
    
214
    @Override
215
    public FeatureTableModel createFeatureTableModel(FeatureStore featureStore,
216
            FeatureQuery featureQuery) {
217
        try {
218
            FeaturePagingHelper pager = DALLocator.getDataManager().createFeaturePagingHelper(
219
                    featureStore, featureQuery,
220
                    FeaturePagingHelper.DEFAULT_PAGE_SIZE
221
            );
222
            return this.createFeatureTableModel(pager);
223
        } catch (BaseException ex) {
224
            throw new RuntimeException("Can't create a FeatureTableModel.", ex);
225
        }
226
    }
227
    
228
    @Override
229
    public FeatureTableModel createFeatureTableModel(FeaturePagingHelper featurePager) {
230
        return new DefaultFeatureTableModel(featurePager);
231
    }
232
    
233
    @Override
234
    public ProjectionPickerController createProjectionPickerController(
235
            JTextField txtProjection,
236
            JButton btnSelectProjection
237
        ) {
238
        ProjectionPickerController picker = new ProjectionPickerController(txtProjection, btnSelectProjection);
239
        return picker;
240
    }
241

    
242
    @Override
243
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo) {
244
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, null);
245
        return controller;
246
    }
247

    
248
    @Override
249
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list) {
250
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, null);
251
        return controller;
252
    }
253

    
254
    @Override
255
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter) {
256
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, filter);
257
        return controller;
258
    }
259

    
260
    @Override
261
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list, Predicate<FeatureAttributeDescriptor> filter) {
262
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, filter);
263
        return controller;
264
    }
265

    
266
    @Override
267
    public FeatureTypePanel createFeatureTypePanel() {
268
        FeatureTypePanel panel = new DefaultFeatureTypePanel();
269
        return panel;
270
    }
271
    
272
    @Override
273
    public FeatureTypeAttributePanel createFeatureTypeAttributePanel() {
274
        FeatureTypeAttributePanel panel = new DefaultFeatureTypeAttributePanel();
275
        return panel;
276
    }
277

    
278
    @Override
279
    public FeatureStoreElement createFeatureStoreElement() {
280
        FeatureStoreElement e = new DefaultFeatureStoreElement2(null);
281
        return e;
282
    }
283

    
284
    @Override
285
    public FeatureStoreElement createFeatureStoreElement(FeatureStore store) {
286
        FeatureStoreElement e = new DefaultFeatureStoreElement2(store);
287
        return e;
288
    }
289

    
290
    @Override
291
    public ExpressionPickerController createExpressionPickerController(FeatureStore store, JTextComponent text, JButton button) {    
292
        FeatureSymbolTable previewSymbolTable = DALLocator.getManager().createFeatureSymbolTable();
293
        previewSymbolTable.setFeature(store.getSampleFeature());
294
        
295
        ExpressionPickerController controller = ExpressionEvaluatorSwingLocator.getManager().createExpressionPickerController(text, button);
296
        controller.addElement(this.createFeatureStoreElement(store));
297
        controller.setPreviewSymbolTable(previewSymbolTable);
298
        
299
        return controller;
300
    }
301
    
302

    
303
    @Override
304
    public FeatureStoreSearchPanel createFeatureStoreSearchPanel(FeatureStore store) {
305
        DefaultSearchPanel e = new DefaultSearchPanel(store);
306
        return e;
307
    }
308

    
309
    @Override
310
    public final void registerStoreAction(DALActionFactory action) {
311
        this.featureStoreSearchActions.put(action.getName().toLowerCase(), action);
312
    }
313
    
314
    @Override
315
    public  Collection<DALActionFactory> getStoreActions() {
316
        return Collections.unmodifiableCollection(this.featureStoreSearchActions.values());
317
    }
318

    
319
    @Override
320
    public  DALActionFactory getStoreAction(String name) {
321
        DALActionFactory action = this.featureStoreSearchActions.get(name.toLowerCase());
322
        return action;
323
    }
324
    
325
    @Override
326
    public void setStoreAction(AbstractButton component, String name, boolean preserveLabel, DALActionContext context) {
327
        DALActionFactory factory = this.getStoreAction(name);
328
        Action action = factory.createAction(context);
329
        if( preserveLabel ) {
330
            String s = component.getText();
331
            component.setAction(action);
332
            component.setText(s);
333
        } else {
334
            component.setAction(action);
335
        }
336
    }
337

    
338

    
339
    @Override
340
    public PickerController<JDBCServerExplorerParameters> createJDBCConnectionPickerController(
341
            JComboBox cboConnection, JButton btnConnection
342
        ) {
343
        JDBCConnectionPickerController x = new JDBCConnectionPickerController(cboConnection, btnConnection);
344
        return x;
345
    }
346

    
347
    @Override
348
    public TableModel createSimpleFeaturesTableModel(FeatureStore store) {
349
        try {
350
            SimpleFeaturesTableModel m = new SimpleFeaturesTableModel(store);
351
            return m;
352
        } catch (DataException ex) {
353
            throw new RuntimeException("Can't creatre SimpleFeaturesTableModel.", ex);
354
        }
355
    }
356
    
357
    @Override
358
    public TableModel createSimpleFeaturesTableModel(FeatureType featureType, List<String> columnNames, List<Feature> features) {
359
        SimpleFeaturesTableModel m = new SimpleFeaturesTableModel(featureType, columnNames, features);
360
        return m;
361
    }
362

    
363
    @Override
364
    public ListCellRenderer createDefaultFeatureAttributeListCellRenderer() {
365
        ListCellRenderer r = new DefaultFeatureAttributeListCellRenderer();
366
        return r;
367
    }
368

    
369
    @Override
370
    public FeatureStoreOrderPanel createFeatureStoreOrderPanel() {
371
        DefaultFeatureStoreOrderPanel p = new DefaultFeatureStoreOrderPanel();
372
        return p;
373
    }
374
    
375
}