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

History | View | Annotate | Download (11.8 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.swing.DataSwingManager;
56
import org.gvsig.fmap.dal.swing.FeatureTableModel;
57
import org.gvsig.fmap.dal.swing.JFeatureTable;
58
import org.gvsig.fmap.dal.swing.expressionevaluator.FeatureStoreElement;
59
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
60
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypeAttributePanel;
61
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
62
import org.gvsig.fmap.dal.swing.impl.expressionevaluator.DefaultFeatureStoreElement2;
63
import org.gvsig.fmap.dal.swing.impl.featuretable.FeatureTablePanel;
64
import org.gvsig.fmap.dal.swing.impl.featuretable.table.DefaultFeatureTableModel;
65
import org.gvsig.fmap.dal.swing.impl.featuretable.table.EmptyFeatureTableModel;
66
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultAttributeDescriptorPickerController;
67
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypeAttributePanel;
68
import org.gvsig.fmap.dal.swing.impl.featuretype.DefaultFeatureTypePanel;
69
import org.gvsig.fmap.dal.swing.impl.jdbc.DefaultJDBCConnectionPanel;
70
import org.gvsig.fmap.dal.swing.impl.searchpanel.DefaultSearchPanel;
71
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionAddAction;
72
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionAddAction.SelectionAddActionFactory;
73
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionFilterAction;
74
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionFilterAction.SelectionFilterActionFactory;
75
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionSetAction;
76
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.SelectionSetAction.SelectionSetActionFactory;
77
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.ShowFormAction;
78
import org.gvsig.fmap.dal.swing.impl.searchpanel.actions.ShowFormAction.ShowFormActionFactory;
79
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
80
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
81
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel.ActionFactory;
82
import org.gvsig.tools.dynform.DynFormLocator;
83
import org.gvsig.tools.dynobject.DynClass;
84
import org.gvsig.tools.dynobject.DynStruct;
85
import org.gvsig.tools.exception.BaseException;
86

    
87

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

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

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

    
137
    @Override
138
    public JExpressionBuilder createQueryFilterExpresion(FeatureStore store) {
139
        DataManager dataManager = DALLocator.getDataManager();
140
        ExpressionEvaluatorSwingManager swingManager = ExpressionEvaluatorSwingLocator.getManager();
141
        FeatureSymbolTable featureSymbolTable = dataManager.createFeatureSymbolTable();
142

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

    
166
    @Override
167
    public JFeatureForm createJFeatureForm(FeatureStore store) throws CreateJFeatureFormException {
168
        JFeatureForm form = new DefaultJFeatureForm();
169
        form.setStore(store);
170
        return form;
171
    }
172

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

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

    
223
    @Override
224
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo) {
225
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, null);
226
        return controller;
227
    }
228

    
229
    @Override
230
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JList list) {
231
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(list, null);
232
        return controller;
233
    }
234

    
235
    @Override
236
    public AttributeDescriptorPickerController createAttributeDescriptorPickerController(JComboBox combo, Predicate<FeatureAttributeDescriptor> filter) {
237
        AttributeDescriptorPickerController controller = new DefaultAttributeDescriptorPickerController(combo, filter);
238
        return controller;
239
    }
240

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

    
247
    @Override
248
    public FeatureTypePanel createFeatureTypePanel() {
249
        FeatureTypePanel panel = new DefaultFeatureTypePanel();
250
        return panel;
251
    }
252
    
253
    @Override
254
    public FeatureTypeAttributePanel createFeatureTypeAttributePanel() {
255
        FeatureTypeAttributePanel panel = new DefaultFeatureTypeAttributePanel();
256
        return panel;
257
    }
258

    
259
    @Override
260
    public FeatureStoreElement createFeatureStoreElement() {
261
        FeatureStoreElement e = new DefaultFeatureStoreElement2(null);
262
        return e;
263
    }
264

    
265
    @Override
266
    public FeatureStoreSearchPanel createFeatureStoreSearchPanel(FeatureStore store) {
267
        DefaultSearchPanel e = new DefaultSearchPanel(store);
268
        return e;
269
    }
270

    
271
    @Override
272
    public final void registerFeatureStoreSearchAction(ActionFactory action) {
273
        this.featureStoreSearchActions.put(action.getName().toLowerCase(), action);
274
    }
275
    
276
    @Override
277
    public  Collection<ActionFactory> getFeatureStoreSearchActions() {
278
        return Collections.unmodifiableCollection(this.featureStoreSearchActions.values());
279
    }
280
}