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

History | View | Annotate | Download (7.27 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.Dimension;
9
import java.awt.event.ItemEvent;
10
import java.awt.event.ItemListener;
11
import javax.swing.DefaultComboBoxModel;
12
import javax.swing.event.DocumentEvent;
13
import javax.swing.event.DocumentListener;
14
import org.gvsig.tools.swing.api.ToolsSwingLocator;
15
import org.gvsig.tools.swing.api.ToolsSwingManager;
16
import org.gvsig.tools.swing.api.windowmanager.Dialog;
17
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
18
import org.gvsig.topology.lib.api.TopologyDataSet;
19
import org.gvsig.topology.lib.api.TopologyLocator;
20
import org.gvsig.topology.lib.api.TopologyManager;
21
import org.gvsig.topology.lib.api.TopologyPlan;
22
import org.gvsig.topology.lib.api.TopologyRule;
23
import org.gvsig.topology.lib.api.TopologyRuleFactory;
24

    
25
/**
26
 *
27
 * @author jjdelcerro
28
 */
29
@SuppressWarnings("UseSpecificCatch")
30
public class CreateRuleDialog extends CreateRuleDialogView {
31

    
32
    private final TopologyPlan plan;
33
    private Dialog dialog;
34

    
35
    CreateRuleDialog(TopologyPlan plan) {
36
        this.plan = plan;
37
        this.dialog = null;
38
        this.initComponents();
39
    }
40

    
41
    private void initComponents() {
42
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
43

    
44
        toolsSwingManager.setDefaultPopupMenu(this.txtDescription);
45
        this.txtDescription.setPreferredSize(new Dimension(200,200));
46

    
47
        DefaultComboBoxModel<TopologyDataSet> model1 = new DefaultComboBoxModel<>();
48
        for (TopologyDataSet dataSet : this.plan.getDataSets()) {
49
            model1.addElement(dataSet);
50
        }
51
        this.cboDataSet1.setModel(model1);
52
        this.cboDataSet1.setSelectedIndex(-1);
53
        this.cboDataSet1.addItemListener(new ItemListener() {
54
            @Override
55
            public void itemStateChanged(ItemEvent e) {
56
                performDataSet1Selected();
57
            }
58
        });
59
        this.cboRule.addItemListener(new ItemListener() {
60
            @Override
61
            public void itemStateChanged(ItemEvent e) {
62
                performRuleSelected();
63
            }
64
        });
65
        this.txtTolerance.setText(String.valueOf(this.plan.getTolerance()));
66
        this.txtTolerance.getDocument().addDocumentListener(new DocumentListener() {
67
            @Override
68
            public void insertUpdate(DocumentEvent e) {
69
                validateData();
70
            }
71

    
72
            @Override
73
            public void removeUpdate(DocumentEvent e) {
74
                validateData();
75
            }
76

    
77
            @Override
78
            public void changedUpdate(DocumentEvent e) {
79
                validateData();
80
            }
81
        });
82

    
83
        this.setOkButtonEnabled(false);
84
        this.cboRule.setSelectedIndex(-1);
85
        this.cboRule.setEnabled(false);
86
        this.cboDataSet2.setEnabled(false);
87
        this.cboDataSet2.setSelectedItem(-1);
88

    
89
        this.setPreferredSize(new Dimension(650, 200));
90

    
91
        this.translate();
92
    }
93

    
94
    public void setDialog(Dialog dialog) {
95
        this.dialog = dialog;
96
    }
97

    
98
    private void setOkButtonEnabled(boolean enabled) {
99
        if (this.dialog == null) {
100
            return;
101
        }
102
        this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, enabled);
103
    }
104

    
105
    private void translate() {
106
        ToolsSwingManager tsm = ToolsSwingLocator.getToolsSwingManager();
107
        tsm.translate(this.lblDataSet1);
108
        tsm.translate(this.lblDataSet2);
109
//        tsm.translate(this.lblLabelDescription);
110
        tsm.translate(this.lblRule);
111
        tsm.translate(this.lblTolerance);
112
    }
113

    
114
    private void validateData() {
115
        try {
116
            double x = Double.parseDouble(this.txtTolerance.getText());
117
        } catch (Exception ex) {
118
            this.setOkButtonEnabled(false);
119
            return;
120
        }
121
        TopologyDataSet dataSet = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
122
        if (dataSet == null) {
123
            this.setOkButtonEnabled(false);
124
            return;
125
        }
126
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
127
        if (ruleFactory == null) {
128
            this.setOkButtonEnabled(false);
129
            return;
130
        }
131
        this.setOkButtonEnabled(true);
132
    }
133

    
134
    private void performDataSet1Selected() {
135
        TopologyDataSet dataSet = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
136
        if (dataSet == null) {
137
            this.setOkButtonEnabled(false);
138
            this.cboRule.setSelectedIndex(-1);
139
            this.cboRule.setEnabled(false);
140
            this.cboDataSet2.setEnabled(false);
141
            this.cboDataSet2.setSelectedItem(-1);
142
            return;
143
        }
144
        TopologyManager manager = TopologyLocator.getTopologyManager();
145
        DefaultComboBoxModel<TopologyRuleFactory> model1 = new DefaultComboBoxModel<>();
146
        for (TopologyRuleFactory ruleFactory : manager.getRuleFactories(dataSet)) {
147
            model1.addElement(ruleFactory);
148
        }
149
        this.cboRule.setModel(model1);
150
        this.cboRule.setSelectedIndex(-1);
151
        this.cboRule.setEnabled(true);
152
    }
153

    
154
    private void performRuleSelected() {
155
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
156
        if (ruleFactory == null) {
157
            this.setOkButtonEnabled(false);
158
            this.cboDataSet2.setEnabled(false);
159
            this.cboDataSet2.setSelectedItem(-1);
160
            return;
161
        }
162
        DefaultComboBoxModel<TopologyDataSet> model2 = new DefaultComboBoxModel<>();
163
        if (ruleFactory.hasSecondaryDataSet()) {
164
            for (TopologyDataSet dataSet : this.plan.getSecondaryDataSets(ruleFactory)) {
165
                model2.addElement(dataSet);
166
            }
167
        }
168
        if (model2.getSize() == 0) {
169
            this.cboDataSet2.setEnabled(false);
170
        } else {
171
            this.cboDataSet2.setEnabled(true);
172
        }
173
        this.cboDataSet2.setModel(model2);
174
        this.cboDataSet2.setSelectedItem(-1);
175

    
176
        StringBuilder html = new StringBuilder();
177
        html.append("<html>\n");
178
        html.append(ruleFactory.getDescription().replace("\n", "<br>")).append("<br>\n");
179
        html.append("</html>\n");
180

    
181
        this.txtDescription.setContentType("text/html");
182
        this.txtDescription.setText(html.toString());
183
        this.txtDescription.setCaretPosition(0);
184
        
185
        this.validateData();
186
    }
187

    
188
    public TopologyRule getRule() {
189
        TopologyDataSet dataSet1 = (TopologyDataSet) this.cboDataSet1.getSelectedItem();
190
        TopologyRuleFactory ruleFactory = (TopologyRuleFactory) this.cboRule.getSelectedItem();
191
        if (dataSet1 == null || ruleFactory == null) {
192
            return null;
193
        }
194
        TopologyDataSet dataSet2 = (TopologyDataSet) this.cboDataSet2.getSelectedItem();
195
        double tolerance = this.plan.getTolerance();
196
        try {
197
            tolerance = Double.parseDouble(this.txtTolerance.getText());
198
        } catch (Exception ex) {
199

    
200
        }
201
        TopologyRule rule;
202
        if( dataSet2==null ) {
203
            rule = ruleFactory.createRule(plan, dataSet1.getName(), null, tolerance);
204
        } else {
205
            rule = ruleFactory.createRule(plan, dataSet1.getName(), dataSet2.getName(), tolerance);
206
        }
207
        return rule;
208
    }
209

    
210
}