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 @ 44308

History | View | Annotate | Download (12.4 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.Map;
29
import java.util.function.Predicate;
30
import javax.swing.JButton;
31
import javax.swing.JComboBox;
32
import javax.swing.JList;
33
import javax.swing.JTextField;
34
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
35
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
36
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
37
import org.gvsig.featureform.swing.CreateJFeatureFormException;
38
import org.gvsig.featureform.swing.JFeatureForm;
39

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

    
88

    
89
/**
90
 * @author fdiaz
91
 *
92
 */
93
@SuppressWarnings("UseSpecificCatch")
94
public class DefaultDataSwingManager implements DataSwingManager {
95

    
96
    private final Map<String,DALActionFactory> featureStoreSearchActions;
97
    
98
    public DefaultDataSwingManager() {
99
        this.featureStoreSearchActions = new LinkedHashMap<>();
100
        this.registerStoreAction(new SelectionAddActionFactory());
101
        this.registerStoreAction(new SelectionFilterActionFactory());
102
        this.registerStoreAction(new SelectionSetActionFactory());
103
        this.registerStoreAction(new ShowFormActionFactory());
104
    }
105
    
106
    @Override
107
    public JFeaturesForm createJFeaturesForm(FeatureStore store) throws CreateJFeatureFormException {
108
        try {
109
            FeatureType featureType = store.getDefaultFeatureType();
110
            
111
            DefaultJFeaturesForm form = new DefaultJFeaturesForm();
112
            form.bind(store, featureType2DynClass(store, featureType));
113
            return form;
114
            
115
        } catch (Exception ex) {
116
            throw new CreateJFeatureFormException(ex);
117
        }
118
    }
119

    
120
    public DynClass featureType2DynClass(FeatureStore store, FeatureType type) {
121
        FeatureTypeDefinitionsManager featureTypeDefinitionsManager = DALLocator.getFeatureTypeDefinitionsManager();
122
        if( featureTypeDefinitionsManager.contains(store,type) ) {
123
            // Force reload next call to get.
124
            featureTypeDefinitionsManager.remove(store,type);
125
        }
126
        DynClass dynClass = featureTypeDefinitionsManager.get(store,type);
127
        // Force reload next call to get.
128
        DynFormLocator.getDynFormManager().removeDefinition(dynClass.getName());
129
        return dynClass;
130
    }
131
    
132
    @Override
133
    public JDBCConnectionPanel createJDBCConnectionPanel() {
134
        JDBCConnectionPanel x = new DefaultJDBCConnectionPanel();
135
        return x;
136
    }
137

    
138
    @Override
139
    public JDBCConnectionDialog createJDBCConectionDialog() {
140
        JDBCConnectionDialog x = new DefaultJDBCConnectionDialog();
141
        return x;
142
    }
143

    
144
    @Override
145
    public JExpressionBuilder createQueryFilterExpresion(FeatureStore store) {
146
        DataManager dataManager = DALLocator.getDataManager();
147
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
148
        FeatureSymbolTable featureSymbolTable = dataManager.createFeatureSymbolTable();
149

    
150
        Feature sampleFeature = null;
151
        try {
152
            sampleFeature = store.getFeatureSelection().first();
153
            if( sampleFeature == null ) {
154
                sampleFeature = store.first();
155
            }
156
        } catch (DataException ex) {
157
        }      
158
        final JExpressionBuilder builder = swingManager.createJExpressionBuilder();
159
        if( sampleFeature!=null ) {
160
            featureSymbolTable.setFeature(sampleFeature);
161
            builder.setPreviewSymbolTable(featureSymbolTable.createParent());
162
        }
163
        builder.addSymbolTable(featureSymbolTable);
164
        FeatureStoreElement storeElement = new DefaultFeatureStoreElement2(store);
165
        builder.addElement(storeElement);
166
        if( store.getProviderFactory().hasSQLSupport()==DataStoreProviderFactory.YES ) {
167
            builder.getPreferences().setSQLCompatible(true);
168
        }
169
        builder.expandElement(storeElement);
170
        return builder;
171
    }
172

    
173
    @Override
174
    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException {
175
        JFeatureForm form = new DefaultJFeatureForm();
176
        form.setStore(store);
177
        return form;
178
    }
179

    
180
    @Override
181
    public JFeatureForm createJFeatureForm(Feature feature) throws CreateJFeatureFormException {
182
        JFeatureForm form = new DefaultJFeatureForm();
183
        form.setFeature(feature);
184
        return form;
185
    }
186

    
187
    @Override
188
    public JFeatureTable createJFeatureTable(FeatureTableModel model) {
189
        return this.createJFeatureTable(model, true);
190
    }
191
    
192
    @Override
193
    public JFeatureTable createJFeatureTable(FeatureTableModel model, boolean isDoubleBuffered) {
194
        return new FeatureTablePanel(model, isDoubleBuffered);
195
    }
196
    
197
    @Override
198
    public FeatureTableModel createEmptyFeatureTableModel(DynStruct struct) {
199
        return new EmptyFeatureTableModel(struct);
200
    }
201
    
202
    @Override
203
    public FeatureTableModel createFeatureTableModel(FeatureStore featureStore,
204
            FeatureQuery featureQuery) {
205
        try {
206
            FeaturePagingHelper pager = DALLocator.getDataManager().createFeaturePagingHelper(
207
                    featureStore, featureQuery,
208
                    FeaturePagingHelper.DEFAULT_PAGE_SIZE
209
            );
210
            return this.createFeatureTableModel(pager);
211
        } catch (BaseException ex) {
212
            throw new RuntimeException("Can't create a FeatureTableModel.", ex);
213
        }
214
    }
215
    
216
    @Override
217
    public FeatureTableModel createFeatureTableModel(FeaturePagingHelper featurePager) {
218
        return new DefaultFeatureTableModel(featurePager);
219
    }
220
    
221
    @Override
222
    public ProjectionPickerController createProjectionPickerController(
223
            JTextField txtProjection,
224
            JButton btnSelectProjection
225
        ) {
226
        ProjectionPickerController picker = new ProjectionPickerController(txtProjection, btnSelectProjection);
227
        return picker;
228
    }
229

    
230
    @Override
231
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo) {
232
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, null);
233
        return controller;
234
    }
235

    
236
    @Override
237
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list) {
238
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, null);
239
        return controller;
240
    }
241

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

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

    
254
    @Override
255
    public FeatureTypePanel createFeatureTypePanel() {
256
        FeatureTypePanel panel = new DefaultFeatureTypePanel();
257
        return panel;
258
    }
259
    
260
    @Override
261
    public FeatureTypeAttributePanel createFeatureTypeAttributePanel() {
262
        FeatureTypeAttributePanel panel = new DefaultFeatureTypeAttributePanel();
263
        return panel;
264
    }
265

    
266
    @Override
267
    public FeatureStoreElement createFeatureStoreElement() {
268
        FeatureStoreElement e = new DefaultFeatureStoreElement2(null);
269
        return e;
270
    }
271

    
272
    @Override
273
    public FeatureStoreElement createFeatureStoreElement(FeatureStore store) {
274
        FeatureStoreElement e = new DefaultFeatureStoreElement2(store);
275
        return e;
276
    }
277

    
278
    @Override
279
    public FeatureStoreSearchPanel createFeatureStoreSearchPanel(FeatureStore store) {
280
        DefaultSearchPanel e = new DefaultSearchPanel(store);
281
        return e;
282
    }
283

    
284
    @Override
285
    public final void registerStoreAction(DALActionFactory action) {
286
        this.featureStoreSearchActions.put(action.getName().toLowerCase(), action);
287
    }
288
    
289
    @Override
290
    public  Collection<DALActionFactory> getStoreActions() {
291
        return Collections.unmodifiableCollection(this.featureStoreSearchActions.values());
292
    }
293

    
294
    @Override
295
    public PickerController<JDBCServerExplorerParameters> createJDBCConnectionPickerController(
296
            JComboBox cboConnection, JButton btnConnection
297
        ) {
298
        JDBCConnectionPickerController x = new JDBCConnectionPickerController(cboConnection, btnConnection);
299
        return x;
300
    }
301
    
302
    
303
}