Statistics
| Revision:

root / org.gvsig.legend.urbanhorizontalsignage / trunk / org.gvsig.legend.urbanhorizontalsignage / org.gvsig.legend.urbanhorizontalsignage.swing / org.gvsig.legend.urbanhorizontalsignage.swing.impl / src / main / java / org / gvsig / legend / urbanhorizontalsignage / swing / impl / convertlines / DefaultConvertLinesToPolygonsPanel.java @ 9843

History | View | Annotate | Download (14.3 KB)

1
package org.gvsig.legend.urbanhorizontalsignage.swing.impl.convertlines;
2

    
3
import java.util.HashMap;
4
import java.util.Map;
5
import java.util.Properties;
6
import javax.swing.JComponent;
7
import javax.swing.event.TreeSelectionEvent;
8
import org.apache.commons.lang3.BooleanUtils;
9
import org.gvsig.fmap.dal.DataTypes;
10
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
11
import org.gvsig.fmap.dal.feature.FeatureSet;
12
import org.gvsig.fmap.dal.feature.FeatureStore;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.fmap.dal.swing.DALSwingLocator;
15
import org.gvsig.fmap.dal.swing.DataSwingManager;
16
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
17
import org.gvsig.fmap.dal.swing.storesrepository.StoresRepositoryController;
18
import org.gvsig.fmap.geom.Geometry;
19
import org.gvsig.fmap.geom.GeometryUtils;
20
import org.gvsig.legend.urbanhorizontalsignage.lib.api.linelegend.UrbanHorizontalSignageConfig;
21
import org.gvsig.legend.urbanhorizontalsignage.swing.api.ConvertLinesToPolygonsPanel;
22
import org.gvsig.tools.dispose.DisposeUtils;
23
import org.gvsig.tools.resourcesstorage.ResourcesStorage;
24
import org.gvsig.tools.swing.api.ToolsSwingLocator;
25
import org.gvsig.tools.swing.api.ToolsSwingManager;
26
import org.gvsig.tools.swing.api.ToolsSwingUtils;
27
import org.gvsig.tools.swing.api.task.TaskStatusController;
28
import org.gvsig.tools.task.SimpleTaskStatus;
29
import org.slf4j.Logger;
30
import org.slf4j.LoggerFactory;
31

    
32
/**
33
 *
34
 * @author gvSIG Team
35
 */
36
public class DefaultConvertLinesToPolygonsPanel 
37
        extends DefaultConvertLinesToPolygonsPanelView 
38
        implements ConvertLinesToPolygonsPanel 
39
    {
40

    
41
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultConvertLinesToPolygonsPanel.class);
42
    
43
//    private static Map<String,Map<String,Object>> remindervalues = new HashMap<>();
44
    
45
    private AttributeDescriptorPickerController targetColorFieldController;
46
    private AttributeDescriptorPickerController targetLengthFieldController;
47
    private AttributeDescriptorPickerController targetAreaFieldController;
48

    
49
    private FeatureSet source;
50
    private UrbanHorizontalSignageConfig config;
51
    private TaskStatusController statusController;
52
    private StoresRepositoryController storesRepositoryController;
53
    
54
    public DefaultConvertLinesToPolygonsPanel() {
55
        this.source = null;
56
        
57
        initComponents();
58
    }
59
    
60
    private void initComponents(){
61
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
62
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
63
        
64
        targetColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboTargetColorFields, (t) -> {
65
            return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
66
        });
67
        targetColorFieldController.setEditable(true);
68
        
69
        targetLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboTargetLengthFields, (t) -> {
70
            return t.getDataType().isNumeric();
71
        });
72
        targetLengthFieldController.setEditable(true);
73
        
74
        targetAreaFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboTargetAreaFields, (t) -> {
75
            return t.getDataType().isNumeric();
76
        });
77
        targetAreaFieldController.setEditable(true);
78
        
79
        this.treeTargetStore.getSelectionModel().addTreeSelectionListener((TreeSelectionEvent e) -> {
80
            doUpdateTargetFeatureType();
81
            updateEnableComponents();
82
        });
83
        this.storesRepositoryController = dataSwingManager.createStoresRepositoryController(treeTargetStore);
84
        
85
        this.statusController = ToolsSwingLocator.getTaskStatusSwingManager().createTaskStatusController(
86
                this.lblStatusCaption,
87
                this.lblStatusMsg,
88
                this.pbStatus
89
        );
90
        this.setTaskStatusVisible(false);
91
        translateAll();
92
        ToolsSwingUtils.ensureRowsCols(this, 13, 80, 20, 100);
93
        updateEnableComponents();
94
    }
95
    
96
    private void translateAll() {
97
        ToolsSwingManager toolsSwingmanager = ToolsSwingLocator.getToolsSwingManager();
98
        toolsSwingmanager.translate(this.lblTargetColorField);
99
        toolsSwingmanager.translate(this.lblTargetLengthField);
100
        toolsSwingmanager.translate(this.lblTargetAreaField);
101
        toolsSwingmanager.translate(this.lblElementsToProcess);
102
        toolsSwingmanager.translate(this.lblTargetLayer);
103
        toolsSwingmanager.translate(this.lblDeleteLinesAtFinish);
104
    }
105

    
106
    private void putFromResources(FeatureSet source) {
107
        FeatureStore store = null;
108
        ResourcesStorage resourcesStorage = null;
109
        ResourcesStorage.Resource resource = null;
110
        try {
111
            store = source.getFeatureStore();
112
            resourcesStorage = store.getResourcesStorage();
113
            resource = resourcesStorage.getResource("urbsignage_lines2pol");
114
            if( resource!=null ) {
115
                if( resource.exists() ) {
116
                    try {
117
                        Properties props = new Properties();
118
                        props.load(resource.asInputStream());
119
                        this.storesRepositoryController.setSelectedStore(props.getProperty("StoreName", null));
120
                        this.targetColorFieldController.set(props.getProperty("Color", null));
121
                        this.targetAreaFieldController.set(props.getProperty("Area", null));
122
                        this.targetLengthFieldController.set(props.getProperty("Len", null));
123
                        this.chkDeleteLinesAtFinish.setSelected(BooleanUtils.toBoolean(props.getProperty("DeleteAtFinish", "false")));
124
                    } catch (Exception ex) {
125
                        LOGGER.warn("Don't load values from resources for store "+store.getFullName(), ex);
126
                    }
127
                }
128
            }
129
        } finally {
130
            DisposeUtils.disposeQuietly(resource);
131
            DisposeUtils.disposeQuietly(resourcesStorage);
132
            DisposeUtils.disposeQuietly(store);
133
        }
134
    }
135
    
136
    private void saveValuesInResources(FeatureSet source) {
137
        FeatureStore store = null;
138
        ResourcesStorage resourcesStorage = null;
139
        ResourcesStorage.Resource resource = null;
140
        try {
141
            store = source.getFeatureStore();
142
            resourcesStorage = store.getResourcesStorage();
143
            resource = resourcesStorage.getResource("urbsignage_lines2pol");
144
            if( resource!=null ) {
145
                try {
146
                    String storeName = "";
147
                    store = this.storesRepositoryController.getSelectedFeatureStore();
148
                    if( store!=null ) {
149
                        storeName = store.getName();
150
                        DisposeUtils.dispose(store);
151
                    }
152
                    Properties props = new Properties();
153
                    props.setProperty("Color", this.targetColorFieldController.getName());
154
                    props.setProperty("Len", this.targetLengthFieldController.getName());
155
                    props.setProperty("Area", this.targetAreaFieldController.getName());
156
                    props.setProperty("DeleteAtFinish", BooleanUtils.toStringTrueFalse(this.chkDeleteLinesAtFinish.isSelected()));
157
                    props.setProperty("StoreName", storeName);
158
                    props.store(resource.asOutputStream(), "");
159
                    resource.close();
160
                } catch (Exception ex) {
161
                    LOGGER.warn("Don't save values to resources for store "+store.getFullName(), ex);
162
                }
163
            }
164
        } finally {
165
            DisposeUtils.disposeQuietly(resource);
166
            DisposeUtils.disposeQuietly(resourcesStorage);
167
            DisposeUtils.disposeQuietly(store);
168
        }
169
    }
170

    
171
    @Override
172
    public void setSource(FeatureSet source) {
173
        this.source = source;
174
        
175
        if( this.source==null || this.source.isEmpty() ) {
176
            this.targetColorFieldController.clean();
177
            this.targetAreaFieldController.clean();
178
            this.targetLengthFieldController.clean();
179
            this.txtElementsToProcess.setText("");
180
        } else {
181
            this.putFromResources(source);        
182
            this.txtElementsToProcess.setText(String.valueOf(this.source.size()));
183
        }
184
        this.updateEnableComponents();
185
    }
186

    
187
//    @Override
188
//    public void setStores(TreeModel stores) {
189
//        this.stores = stores;
190
//        this.treeTargetLayer.setModel(stores);
191
//        this.updateEnableComponents();
192
//    }
193

    
194
    @Override
195
    public UrbanHorizontalSignageConfig fetch(UrbanHorizontalSignageConfig config) {
196
        config.setTargetColorFieldName(this.targetColorFieldController.getName());
197
        config.setTargetLenghtFieldName(this.targetLengthFieldController.getName());
198
        config.setTargetAreaFieldName(this.targetAreaFieldController.getName());
199
//        saveValues();
200
        saveValuesInResources(this.source);
201
        return config;
202
    }
203

    
204
    @Override
205
    public void put(UrbanHorizontalSignageConfig config) {
206
        try {
207
            this.config = config.clone();
208
        } catch (CloneNotSupportedException ex) {
209
            throw new RuntimeException("Can't put config", ex);
210
        }
211
        if(config.getTargetColorFieldName()!=null){
212
            this.targetColorFieldController.set(config.getTargetColorFieldName());
213
        }
214
        if(config.getTargetLenghtFieldName()!=null){
215
            this.targetLengthFieldController.set(config.getTargetLenghtFieldName());
216
        }
217
        if(config.getTargetAreaFieldName()!=null){
218
            this.targetAreaFieldController.set(config.getTargetAreaFieldName());
219
        }
220
        this.updateEnableComponents();
221
    }
222

    
223
    @Override
224
    public JComponent asJComponent() {
225
        return this;
226
    }
227
    
228
    private void doUpdateTargetFeatureType() {
229
        FeatureType ft = this.getTargetFeatureType();
230
        if( ft == null ) {
231
            this.targetColorFieldController.clean();
232
            this.targetAreaFieldController.clean();
233
            this.targetLengthFieldController.clean();
234
            return;
235
        } 
236
        this.targetColorFieldController.setFeatureType(ft);
237
        this.targetAreaFieldController.setFeatureType(ft);
238
        this.targetLengthFieldController.setFeatureType(ft);
239
//        restoreValues();
240
    }
241

    
242
    private void updateEnableComponents() {
243
        if( this.source==null ) {
244
            this.targetColorFieldController.setEnabled(false);
245
            this.targetAreaFieldController.setEnabled(false);
246
            this.targetLengthFieldController.setEnabled(false);
247
            this.treeTargetStore.setEnabled(false);
248
            return;
249
        }
250
        this.treeTargetStore.setEnabled(true);
251
        if( this.getTargetStore()==null ) {
252
            this.targetColorFieldController.setEnabled(false);
253
            this.targetAreaFieldController.setEnabled(false);
254
            this.targetLengthFieldController.setEnabled(false);
255
            return;
256
        }
257
        this.targetColorFieldController.setEnabled(true);
258
        this.targetAreaFieldController.setEnabled(true);
259
        this.targetLengthFieldController.setEnabled(true);
260
    }
261
    
262
    @Override
263
    public UrbanHorizontalSignageConfig getConfig() {
264
        return this.fetch(this.config);
265
    }
266

    
267
    @Override
268
    public FeatureSet getSource() {
269
        return this.source;
270
    }
271

    
272
    @Override
273
    public FeatureStore getTargetStore() {
274
        FeatureStore store = this.storesRepositoryController.getSelectedFeatureStore();
275
        if( store == null ) {
276
            return null;
277
        }
278
        try {
279
            FeatureType ft = store.getDefaultFeatureTypeQuietly();
280
            FeatureAttributeDescriptor geomattr = ft.getDefaultGeometryAttribute();
281
            int geomtype = geomattr.getGeomType().getType();
282
            if( GeometryUtils.isSubtype(Geometry.TYPES.POLYGON, geomtype) ||
283
                GeometryUtils.isSubtype(Geometry.TYPES.MULTIPOLYGON, geomtype) ) {
284
                return store;
285
            }
286
            return null;
287
        } catch(Exception ex) {
288
            LOGGER.warn("Can't get target store",ex);
289
            return null;
290
        }
291
    }
292

    
293
    private FeatureType getTargetFeatureType() {
294
        FeatureStore store = this.getTargetStore();
295
        if( store == null) {
296
            return null;
297
        }
298
        return store.getDefaultFeatureTypeQuietly();
299
    }
300
    
301
    @Override
302
    public SimpleTaskStatus getTaskStatus() {
303
        return this.statusController.getSimpleTaskStatus();
304
    }
305

    
306
    @Override
307
    public void setTaskStatusVisible(boolean visible) {
308
        this.pbStatus.setVisible(visible);
309
        this.lblStatusCaption.setVisible(visible);
310
        this.lblStatusMsg.setVisible(visible);
311
    }
312

    
313
    @Override
314
    public boolean getDeleteSourceAtFinish() {
315
        return this.chkDeleteLinesAtFinish.isSelected();
316
    }
317

    
318
    @Override
319
    public void setDeleteSourceAtFinish(boolean deleteSourceAtFinish) {
320
        this.chkDeleteLinesAtFinish.setSelected(deleteSourceAtFinish);
321
    }
322

    
323
//    private void restoreValues() {
324
//        FeatureStore store = this.getTargetStore();
325
//        if( store!=null ) {
326
//            Map<String,Object> values = remindervalues.get(store.getFullName());
327
//            if( values!=null ) {
328
//                this.targetColorFieldController.set((String) values.get("Color"));
329
//                this.targetAreaFieldController.set((String) values.get("Area"));
330
//                this.targetLengthFieldController.set((String) values.get("Len"));
331
//                this.chkDeleteLinesAtFinish.setSelected((boolean) values.get("DeleteAtFinish"));
332
//                LOGGER.info("Restore values for store "+store.getFullName());
333
//            } else {
334
//                LOGGER.info("Don't locate values for store "+store.getFullName());
335
//            }
336
//        }
337
//    }
338
//    
339
//    private void saveValues() {
340
//        FeatureStore targetStore = this.getTargetStore();
341
//        if( targetStore!=null ) {
342
//            Map<String,Object>values = new HashMap<>();
343
//            values.put("Color", this.targetColorFieldController.getName());
344
//            values.put("Len", this.targetLengthFieldController.getName());
345
//            values.put("Area", this.targetAreaFieldController.getName());
346
//            values.put("DeleteAtFinish", this.chkDeleteLinesAtFinish.isSelected());
347
//            remindervalues.put(targetStore.getFullName(),values);
348
//            LOGGER.info("Save values for store "+targetStore.getFullName());
349
//        }
350
//        
351
//    }
352
}