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 / searchpanel / SelectGeometryPanel.java @ 47564

History | View | Annotate | Download (6.84 KB)

1
package org.gvsig.fmap.dal.swing.impl.searchpanel;
2

    
3
import javax.swing.JComponent;
4
import javax.swing.event.ChangeEvent;
5
import org.apache.commons.lang3.StringUtils;
6
import org.cresques.cts.IProjection;
7
import org.gvsig.fmap.dal.feature.FeatureStore;
8
import org.gvsig.fmap.dal.swing.DALSwingLocator;
9
import org.gvsig.fmap.dal.swing.DataSwingManager;
10
import org.gvsig.fmap.dal.swing.ProjectionPickerController;
11
import static org.gvsig.fmap.dal.swing.impl.searchpanel.SearchConditionFieldController.GEOM_OPERAND_MODE_CLIPBOARD;
12
import static org.gvsig.fmap.dal.swing.impl.searchpanel.SearchConditionFieldController.GEOM_OPERAND_MODE_CONSTANT;
13
import static org.gvsig.fmap.dal.swing.impl.searchpanel.SearchConditionFieldController.GEOM_OPERAND_MODE_LAYER_SELECTION;
14
import org.gvsig.fmap.dal.swing.storesrepository.StoresRepositoryController;
15
import org.gvsig.fmap.geom.Geometry;
16
import org.gvsig.fmap.geom.GeometryUtils;
17
import org.gvsig.tools.dispose.DisposeUtils;
18
import org.gvsig.tools.swing.api.Component;
19
import org.gvsig.tools.swing.api.ToolsSwingLocator;
20
import org.gvsig.tools.swing.api.ToolsSwingManager;
21
import org.gvsig.tools.swing.api.ToolsSwingUtils;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
public class SelectGeometryPanel 
28
        extends SelectGeometryPanelView 
29
        implements Component
30
    {
31

    
32
    private ProjectionPickerController pickerProjection;
33
    private StoresRepositoryController storesRepositoryController;
34

    
35
    public SelectGeometryPanel() {
36
        this.createComponents();
37
    }
38
    
39
    private void createComponents() {
40
        this.initComponents();        
41
    }
42
    
43
    private void initComponents() {
44
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
45

    
46
        this.translate();
47
        
48
        DataSwingManager dataSwingMamager = DALSwingLocator.getDataSwingManager();
49
        
50
        this.pickerProjection = dataSwingMamager.createProjectionPickerController(
51
                txtProjection, 
52
                btnProjection
53
        );
54
        this.storesRepositoryController = dataSwingMamager.createStoresRepositoryController(treeStores);
55
        
56
        this.rdbConstantGeometry.addChangeListener((ChangeEvent e) -> {
57
            doUpdateEnableComponents();
58
        });
59
        this.rdbUseGeomsFromClipbard.addChangeListener((ChangeEvent e) -> {
60
            doUpdateEnableComponents();
61
        });
62
        this.rdbUseGeomsFromLayerSelection.addChangeListener((ChangeEvent e) -> {
63
            doUpdateEnableComponents();
64
        });
65
        this.rdbUseGeomsFromClipbard.setSelected(true);
66
        
67
        toolsSwingManager.setDefaultPopupMenu(txtGeometry);
68
        toolsSwingManager.addClearButton(txtGeometry);
69
        
70
        doUpdateEnableComponents();
71

    
72
        ToolsSwingUtils.ensureRowsCols(this, 24, 80, 50, 100);
73
    }
74

    
75
    private void translate() {
76
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
77
        
78
        toolsSwingManager.translate(this.rdbConstantGeometry);
79
        toolsSwingManager.translate(this.rdbUseGeomsFromClipbard);
80
        toolsSwingManager.translate(this.rdbUseGeomsFromLayerSelection);
81
        toolsSwingManager.translate(this.lblProjection);
82
        toolsSwingManager.translate(this.chkUseTheGeometryBoundingBox);
83
    }
84
    
85
    @Override
86
    public JComponent asJComponent() {
87
        return this;
88
    }
89

    
90
    public int getMode() {
91
        if( this.rdbUseGeomsFromClipbard.isSelected() ) {
92
            return GEOM_OPERAND_MODE_CLIPBOARD;
93
        } else if( this.rdbUseGeomsFromLayerSelection.isSelected() ) {
94
            return GEOM_OPERAND_MODE_LAYER_SELECTION;
95
        } else if( this.rdbConstantGeometry.isSelected() ) {
96
            return GEOM_OPERAND_MODE_CONSTANT;
97
        }
98
        return GEOM_OPERAND_MODE_CLIPBOARD;
99
    }
100

    
101
    public boolean useBox2dInGeometryOperand() {
102
        return this.chkUseTheGeometryBoundingBox.isSelected();
103
    }
104
    
105
    public Geometry getGeometry() {
106
        String s = this.txtGeometry.getText();
107
        if( StringUtils.isBlank(s) ) {
108
            return null;
109
        }
110
        return GeometryUtils.createFrom(s, this.getProjection());
111
    }
112
    
113
    public IProjection getProjection() {
114
        return this.pickerProjection.get();
115
    }
116

    
117
    public String getStoreName() {
118
        FeatureStore store = null;
119
        try {
120
            store = this.storesRepositoryController.getSelectedFeatureStore();
121
            if( store == null ) {
122
                return null;
123
            }
124
            return store.getName();
125
        } finally {
126
            DisposeUtils.disposeQuietly(store);                    
127
        }
128
    }
129

    
130
    private void doUpdateEnableComponents() {
131
        if( this.rdbUseGeomsFromClipbard.isSelected() ) {
132
            this.treeStores.setEnabled(false);
133
            this.pickerProjection.setEnabled(false);
134
            this.txtGeometry.setEnabled(false);
135
            this.chkUseTheGeometryBoundingBox.setEnabled(false);
136
        } else if( this.rdbUseGeomsFromLayerSelection.isSelected() ) {
137
            this.treeStores.setEnabled(true);
138
            this.pickerProjection.setEnabled(false);
139
            this.txtGeometry.setEnabled(false);
140
            this.chkUseTheGeometryBoundingBox.setEnabled(true);
141
        } else if( this.rdbConstantGeometry.isSelected() ) {
142
            this.treeStores.setEnabled(false);
143
            this.pickerProjection.setEnabled(true);
144
            this.txtGeometry.setEnabled(true);
145
            this.chkUseTheGeometryBoundingBox.setEnabled(false);
146
        }
147
    }
148

    
149
    void setMode(int mode) {
150
        switch(mode) {
151
            case GEOM_OPERAND_MODE_LAYER_SELECTION:
152
                this.rdbUseGeomsFromClipbard.setSelected(false);
153
                this.rdbUseGeomsFromLayerSelection.setSelected(true);
154
                this.rdbConstantGeometry.setSelected(false);
155
                break;
156
            case GEOM_OPERAND_MODE_CONSTANT:
157
                this.rdbUseGeomsFromClipbard.setSelected(false);
158
                this.rdbUseGeomsFromLayerSelection.setSelected(false);
159
                this.rdbConstantGeometry.setSelected(true);
160
                break;
161
            case GEOM_OPERAND_MODE_CLIPBOARD:
162
            default:
163
                this.rdbUseGeomsFromClipbard.setSelected(true);
164
                this.rdbUseGeomsFromLayerSelection.setSelected(false);
165
                this.rdbConstantGeometry.setSelected(false);
166
                break;
167
        }
168
        doUpdateEnableComponents();
169
    }
170

    
171
    void setGeometry(Geometry geometry) {
172
        if( geometry == null ) {
173
            this.txtGeometry.setText("");
174
        } else {
175
            this.txtGeometry.setText(geometry.convertToWKTQuietly());
176
        }
177
        doUpdateEnableComponents();
178
    }
179

    
180
    void setStoreName(String storeName) {
181
        this.storesRepositoryController.setSelectedStore(storeName);
182
        doUpdateEnableComponents();
183
    }
184

    
185
    void setUseBox2dInGeometryOperand(boolean useBox2d) {
186
        this.chkUseTheGeometryBoundingBox.setSelected(useBox2d);
187
        doUpdateEnableComponents();
188
    }
189
}