Statistics
| Revision:

gvsig-projects-pool / org.gvsig.topology / trunk / org.gvsig.topology / org.gvsig.topology.swing / org.gvsig.topology.swing.impl / src / main / java / org / gvsig / topology / swing / impl / CreateRuleDialog.java @ 727

History | View | Annotate | Download (9.92 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.topology.swing.impl;
7

    
8
import java.awt.Component;
9
import java.awt.Dimension;
10
import java.awt.event.ItemEvent;
11
import java.awt.event.ItemListener;
12
import java.util.Objects;
13
import javax.swing.DefaultComboBoxModel;
14
import javax.swing.DefaultListCellRenderer;
15
import javax.swing.ImageIcon;
16
import javax.swing.JLabel;
17
import javax.swing.JList;
18
import javax.swing.ListCellRenderer;
19
import javax.swing.event.DocumentEvent;
20
import javax.swing.event.DocumentListener;
21
import org.gvsig.fmap.dal.DataStore;
22
import org.gvsig.fmap.dal.exception.DataException;
23
import org.gvsig.fmap.dal.feature.FeatureStore;
24
import org.gvsig.fmap.geom.Geometry;
25
import org.gvsig.fmap.geom.GeometryUtils;
26
import org.gvsig.tools.swing.api.ToolsSwingLocator;
27
import org.gvsig.tools.swing.api.ToolsSwingManager;
28
import org.gvsig.tools.swing.api.windowmanager.Dialog;
29
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
30
import org.gvsig.tools.swing.icontheme.IconTheme;
31
import org.gvsig.topology.lib.api.TopologyDataSet;
32
import org.gvsig.topology.lib.api.TopologyLocator;
33
import org.gvsig.topology.lib.api.TopologyManager;
34
import org.gvsig.topology.lib.api.TopologyPlan;
35
import org.gvsig.topology.lib.api.TopologyRule;
36
import org.gvsig.topology.lib.api.TopologyRuleFactory;
37

    
38
/**
39
 *
40
 * @author jjdelcerro
41
 */
42
@SuppressWarnings("UseSpecificCatch")
43
public class CreateRuleDialog extends CreateRuleDialogView {
44

    
45
    private class DataSetListCellRenderer extends DefaultListCellRenderer {
46

    
47
        private ImageIcon pointIcon;
48
        private ImageIcon lineIcon;
49
        private ImageIcon polygonIcon;
50

    
51
        public DataSetListCellRenderer() {
52
            IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
53
            if( iconTheme.exists("layer-type-point") ) {
54
                this.pointIcon = iconTheme.get("layer-type-point");
55
            }
56
            if( iconTheme.exists("layer-type-line") ) {
57
                this.lineIcon = iconTheme.get("layer-type-line");
58
            }
59
            if( iconTheme.exists("layer-type-polygon") ) {
60
                this.polygonIcon = iconTheme.get("layer-type-polygon");
61
            }
62
        }
63
        
64
        @Override
65
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
66
            JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
67
            this.setText(Objects.toString(value, ""));
68
            this.setIcon(null);
69
            if( value instanceof TopologyDataSet ) {
70
                DataStore store = ((TopologyDataSet) value).getStore();
71
                if( store instanceof FeatureStore ) {
72
                    try {
73
                        int geomtype = ((FeatureStore) store).getDefaultFeatureType().getDefaultGeometryAttribute().getGeomType().getType();
74
                        if( GeometryUtils.isSubtype(Geometry.TYPES.POINT, geomtype) ) {
75
                            this.setIcon(this.pointIcon);
76
                        } else if( GeometryUtils.isSubtype(Geometry.TYPES.SURFACE, geomtype) ) {
77
                            this.setIcon(this.polygonIcon);
78
                        } else if( GeometryUtils.isSubtype(Geometry.TYPES.CURVE, geomtype) ) {
79
                            this.setIcon(this.lineIcon);
80
                        }
81
                    } catch (DataException ex) {
82
                    }
83
                }
84
            }
85
            return label;
86
        }
87
        
88
    }
89
    private final TopologyPlan plan;
90
    private Dialog dialog;
91

    
92
    CreateRuleDialog(TopologyPlan plan) {
93
        this.plan = plan;
94
        this.dialog = null;
95
        this.initComponents();
96
    }
97

    
98
    private void initComponents() {
99
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
100

    
101
        toolsSwingManager.setDefaultPopupMenu(this.txtDescription);
102
        this.txtDescription.setPreferredSize(new Dimension(200,200));
103

    
104
        DefaultComboBoxModel<TopologyDataSet> model1 = new DefaultComboBoxModel<>();
105
        for (TopologyDataSet dataSet : this.plan.getDataSets()) {
106
            model1.addElement(dataSet);
107
        }
108
        this.cboDataSet1.setModel(model1);
109
        this.cboDataSet1.setSelectedIndex(-1);
110
        this.cboDataSet1.addItemListener(new ItemListener() {
111
            @Override
112
            public void itemStateChanged(ItemEvent e) {
113
                performDataSet1Selected();
114
            }
115
        });
116
//        this.cboDataSet1.setRenderer(new DataSetListCellRenderer());
117
//        this.cboDataSet2.setRenderer(new DataSetListCellRenderer());
118
        this.cboRule.addItemListener(new ItemListener() {
119
            @Override
120
            public void itemStateChanged(ItemEvent e) {
121
                performRuleSelected();
122
            }
123
        });
124
        this.txtTolerance.setText(String.valueOf(this.plan.getTolerance()));
125
        this.txtTolerance.getDocument().addDocumentListener(new DocumentListener() {
126
            @Override
127
            public void insertUpdate(DocumentEvent e) {
128
                validateData();
129
            }
130

    
131
            @Override
132
            public void removeUpdate(DocumentEvent e) {
133
                validateData();
134
            }
135

    
136
            @Override
137
            public void changedUpdate(DocumentEvent e) {
138
                validateData();
139
            }
140
        });
141

    
142
        this.setOkButtonEnabled(false);
143
        this.cboRule.setSelectedIndex(-1);
144
        this.cboRule.setEnabled(false);
145
        this.cboDataSet2.setEnabled(false);
146
        this.cboDataSet2.setSelectedItem(-1);
147

    
148
        this.setPreferredSize(new Dimension(650, 200));
149

    
150
        this.translate();
151
    }
152

    
153
    public void setDialog(Dialog dialog) {
154
        this.dialog = dialog;
155
    }
156

    
157
    private void setOkButtonEnabled(boolean enabled) {
158
        if (this.dialog == null) {
159
            return;
160
        }
161
        this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, enabled);
162
    }
163

    
164
    private void translate() {
165
        ToolsSwingManager tsm = ToolsSwingLocator.getToolsSwingManager();
166
        tsm.translate(this.lblDataSet1);
167
        tsm.translate(this.lblDataSet2);
168
//        tsm.translate(this.lblLabelDescription);
169
        tsm.translate(this.lblRule);
170
        tsm.translate(this.lblTolerance);
171
    }
172

    
173
    private void validateData() {
174
        try {
175
            double x = Double.parseDouble(this.txtTolerance.getText());
176
        } catch (Exception ex) {
177
            this.setOkButtonEnabled(false);
178
            return;
179
        }
180
        TopologyDataSet dataSet = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
181
        if (dataSet == null) {
182
            this.setOkButtonEnabled(false);
183
            return;
184
        }
185
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
186
        if (ruleFactory == null) {
187
            this.setOkButtonEnabled(false);
188
            return;
189
        }
190
        this.setOkButtonEnabled(true);
191
    }
192

    
193
    private void performDataSet1Selected() {
194
        TopologyDataSet dataSet = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
195
        if (dataSet == null) {
196
            this.setOkButtonEnabled(false);
197
            this.cboRule.setSelectedIndex(-1);
198
            this.cboRule.setEnabled(false);
199
            this.cboDataSet2.setEnabled(false);
200
            this.cboDataSet2.setSelectedItem(-1);
201
            return;
202
        }
203
        TopologyManager manager = TopologyLocator.getTopologyManager();
204
        DefaultComboBoxModel<TopologyRuleFactory> model1 = new DefaultComboBoxModel<>();
205
        for (TopologyRuleFactory ruleFactory : manager.getRuleFactories(dataSet)) {
206
            model1.addElement(ruleFactory);
207
        }
208
        this.cboRule.setModel(model1);
209
        this.cboRule.setSelectedIndex(-1);
210
        this.cboRule.setEnabled(true);
211
    }
212

    
213
    private void performRuleSelected() {
214
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
215
        if (ruleFactory == null) {
216
            this.setOkButtonEnabled(false);
217
            this.cboDataSet2.setEnabled(false);
218
            this.cboDataSet2.setSelectedItem(-1);
219
            return;
220
        }
221
        DefaultComboBoxModel<TopologyDataSet> model2 = new DefaultComboBoxModel<>();
222
        if (ruleFactory.hasSecondaryDataSet()) {
223
            for (TopologyDataSet dataSet : this.plan.getSecondaryDataSets(ruleFactory)) {
224
                model2.addElement(dataSet);
225
            }
226
        }
227
        if (model2.getSize() == 0) {
228
            this.cboDataSet2.setEnabled(false);
229
        } else {
230
            this.cboDataSet2.setEnabled(true);
231
        }
232
        this.cboDataSet2.setModel(model2);
233
        this.cboDataSet2.setSelectedItem(-1);
234

    
235
        StringBuilder html = new StringBuilder();
236
        html.append("<html>\n");
237
        html.append(ruleFactory.getDescription().replace("\n", "<br>")).append("<br>\n");
238
        html.append("</html>\n");
239

    
240
        this.txtDescription.setContentType("text/html");
241
        this.txtDescription.setText(html.toString());
242
        this.txtDescription.setCaretPosition(0);
243
        
244
        this.validateData();
245
    }
246

    
247
    public TopologyRule getRule() {
248
        TopologyDataSet dataSet1 = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
249
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
250
        if (dataSet1 == null || ruleFactory == null) {
251
            return null;
252
        }
253
        TopologyDataSet dataSet2 = (TopologyDataSet) this.cboDataSet2.getSelectedItem();
254
        double tolerance = this.plan.getTolerance();
255
        try {
256
            tolerance = Double.parseDouble(this.txtTolerance.getText());
257
        } catch (Exception ex) {
258

    
259
        }
260
        TopologyRule rule;
261
        if( dataSet2==null ) {
262
            rule = ruleFactory.createRule(plan, dataSet1.getName(), null, tolerance);
263
        } else {
264
            rule = ruleFactory.createRule(plan, dataSet1.getName(), dataSet2.getName(), tolerance);
265
        }
266
        return rule;
267
    }
268

    
269
}