Statistics
| Revision:

gvsig-geoprocess / org.gvsig.geoprocess / trunk / org.gvsig.geoprocess / org.gvsig.geoprocess.algorithm / org.gvsig.geoprocess.algorithm.reproject / src / main / java / org / gvsig / geoprocess / algorithm / reproject / ReprojectParametersPanel.java @ 334

History | View | Annotate | Download (11.7 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2012 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.geoprocess.algorithm.reproject;
25

    
26
import java.awt.Dimension;
27
import java.awt.GridBagConstraints;
28
import java.awt.GridBagLayout;
29
import java.awt.Insets;
30
import java.awt.event.ActionEvent;
31
import java.awt.event.ActionListener;
32

    
33
import javax.swing.ComboBoxModel;
34
import javax.swing.DefaultComboBoxModel;
35
import javax.swing.JCheckBox;
36
import javax.swing.JComboBox;
37
import javax.swing.JLabel;
38
import javax.swing.JPanel;
39

    
40
import org.cresques.cts.IProjection;
41
import org.gvsig.app.gui.panels.CRSSelectPanel;
42
import org.gvsig.fmap.crs.CRSFactory;
43
import org.gvsig.geoprocess.lib.api.GeoProcessLocator;
44
import org.gvsig.geoprocess.sextante.gui.algorithm.AlgorithmOutputPanel;
45

    
46
import es.unex.sextante.core.GeoAlgorithm;
47
import es.unex.sextante.core.ObjectAndDescription;
48
import es.unex.sextante.core.OutputObjectsSet;
49
import es.unex.sextante.core.ParametersSet;
50
import es.unex.sextante.core.Sextante;
51
import es.unex.sextante.dataObjects.IVectorLayer;
52
import es.unex.sextante.gui.algorithm.GeoAlgorithmParametersPanel;
53
import es.unex.sextante.gui.algorithm.OutputChannelSelectionPanel;
54
import es.unex.sextante.gui.core.SextanteGUI;
55
import es.unex.sextante.outputs.Output;
56

    
57
/**
58
 * Panel for reproject algorithm
59
 * @author <a href="mailto:nachobrodin@gmail.com">Nacho Brodin</a>
60
 */
61
public class ReprojectParametersPanel extends GeoAlgorithmParametersPanel implements ActionListener {
62
        private static final long                serialVersionUID       = 1L;
63
        private GeoAlgorithm                     m_Algorithm            = null;
64
        private JComboBox                        layersCombo            = null;
65
        private JCheckBox                        selectionOnly          = null;
66
        //private AlgorithmOutputPanel             output                 = null;
67
        private JLabel                           projLabel              = null;
68
        private CRSSelectPanel                   projectionSrcSelector  = null;
69
        private IProjection                      targetLayerProjection  = null;
70
        private AlgorithmOutputPanel             algorithmOutputPanel   = null;
71
        private OutputChannelSelectionPanel      outputChannelSelectionPanelPol;
72
        private OutputChannelSelectionPanel      outputChannelSelectionPanelLine;
73
        private OutputChannelSelectionPanel      outputChannelSelectionPanelPoint;
74
        private JPanel                           outputPanel;
75
        
76
        public ReprojectParametersPanel() {
77
                super();
78
        }
79

    
80
    public void init(GeoAlgorithm algorithm) {
81
            m_Algorithm = algorithm;
82
            initGUI();
83
            init();
84
    }
85

    
86
        private void initGUI() {
87
                GridBagLayout gbl = new GridBagLayout();
88
                this.setLayout(gbl);
89
                
90
                GridBagConstraints gbc = new GridBagConstraints();
91
                gbc.fill = GridBagConstraints.HORIZONTAL;
92
                gbc.weightx = 1.0;
93
                gbc.gridx = 0;
94
                gbc.gridy = 0;
95
                gbc.insets = new Insets(15, 5, 15, 0);
96
                this.add(getComboPanel(GeoProcessLocator.getGeoProcessManager().getTranslation("Input_layer"), getLayersCombo()), gbc);
97
                
98
                gbc.gridy = 1;
99
                gbc.insets = new Insets(0, 5, 15, 0);
100
                this.add(getSelectionCheck(), gbc);
101
                
102
                gbc.gridy = 2;
103
                this.add(getCurrentProjLabel(), gbc);
104
                
105
                gbc.gridy = 3;
106
                this.add(getProjectionSelector(), gbc);
107
                
108
                gbc.gridy = 4;
109
                gbc.fill = GridBagConstraints.BOTH;
110
                gbc.weighty = 1.0;
111
                gbc.weightx = 1.0;
112
                this.add(new JPanel(), gbc);
113
                
114
                gbc.gridy = 5;
115
                gbc.fill = GridBagConstraints.HORIZONTAL;
116
                gbc.weighty = 0.0;
117
                this.add(getOutputChannelSelectionPanel(), gbc);
118
        }
119
        
120
        /**
121
         * Gets the output panel (SEXTANTE)
122
         * @return
123
         */
124
        private JPanel getOutputChannelSelectionPanel() {
125
                if(outputPanel == null) {
126
                        try {
127
                                outputPanel = new JPanel();
128
                                outputPanel.setLayout(new GridBagLayout());
129
                                
130
                                final OutputObjectsSet ooSet = m_Algorithm.getOutputObjects();
131
                                final Output out_pol = ooSet.getOutput(ReprojectAlgorithm.RESULT_POL);
132
                                final Output out_line = ooSet.getOutput(ReprojectAlgorithm.RESULT_LINE);
133
                                final Output out_point = ooSet.getOutput(ReprojectAlgorithm.RESULT_POINT);
134
                                
135
                                outputChannelSelectionPanelPol = new OutputChannelSelectionPanel(out_pol, m_Algorithm.getParameters());
136
                                outputChannelSelectionPanelLine = new OutputChannelSelectionPanel(out_line, m_Algorithm.getParameters());
137
                                outputChannelSelectionPanelPoint = new OutputChannelSelectionPanel(out_point, m_Algorithm.getParameters());
138
                                
139
                                String label = GeoProcessLocator.getGeoProcessManager().getTranslation("Reproject");
140
                                
141
                                GridBagConstraints gbc = new GridBagConstraints();
142
                                gbc.fill = GridBagConstraints.HORIZONTAL;
143
                                gbc.insets = new Insets(0, 0, 4, 0);
144
                                gbc.weightx = 1;
145
                                gbc.gridx = 0;
146
                                gbc.gridy = 0;
147
                                outputPanel.add(new JLabel(" " + label + " [Polygon]               "), gbc);
148
                                
149
                                gbc.gridx = 0;
150
                                gbc.gridy = 1;
151
                                outputPanel.add(new JLabel(" " + label + " [Line]               "), gbc);
152
                                
153
                                gbc.gridx = 0;
154
                                gbc.gridy = 2;
155
                                outputPanel.add(new JLabel(" " + label + " [Point]               "), gbc);
156
                                
157
                                gbc.fill = GridBagConstraints.HORIZONTAL;
158
                                gbc.weightx = 1;
159
                                gbc.gridx = 1;
160
                                gbc.gridy = 0;
161
                                outputPanel.add(outputChannelSelectionPanelPol, gbc);
162
                                
163
                                gbc.gridx = 1;
164
                                gbc.gridy = 1;
165
                                outputPanel.add(outputChannelSelectionPanelLine, gbc);
166
                                
167
                                gbc.gridx = 1;
168
                                gbc.gridy = 2;
169
                                outputPanel.add(outputChannelSelectionPanelPoint, gbc);
170
                        } catch (final Exception e) {
171
                                Sextante.addErrorToLog(e);
172
                        }
173
                }
174
                return outputPanel;
175
        }
176
        
177
        /**
178
         * Gets the output panel (DAL)
179
         * @return
180
         */
181
        @SuppressWarnings("unused")
182
        private AlgorithmOutputPanel getAlgorithmOutputPanel() {
183
                if(algorithmOutputPanel == null)
184
                    algorithmOutputPanel = new AlgorithmOutputPanel();
185
                return algorithmOutputPanel;
186
        }
187
        
188
        /**
189
         * Gets a new JPanel with the text and JComboBox 
190
         * @param text
191
         * @param combo
192
         * @return
193
         */
194
        public JPanel getComboPanel(String text, JComboBox combo) {
195
                JPanel panel = new JPanel();
196
                GridBagLayout gbl = new GridBagLayout();
197
                panel.setLayout(gbl);
198

    
199
                GridBagConstraints gbc = new GridBagConstraints();
200
                gbc.fill = GridBagConstraints.NONE;
201
                gbc.weightx = 0;
202
                gbc.gridx = 0;
203
                gbc.insets = new Insets(0, 2, 0, 50);
204
                JLabel label = new JLabel(text);
205
                label.setPreferredSize(new Dimension(180, 18));
206
                panel.add(label, gbc);
207

    
208
                gbc.fill = GridBagConstraints.HORIZONTAL;
209
                gbc.weightx = 1.0;
210
                gbc.gridx = 1;
211
                gbc.anchor = GridBagConstraints.EAST;
212
                gbc.insets = new Insets(0, 2, 0, 0);
213
                panel.add(combo, gbc);
214
                return panel;
215
        }
216
        
217
        /**
218
         * Gets a ComboBox
219
         * @return
220
         */
221
        public JComboBox getLayersCombo() {
222
                if(layersCombo == null) {
223
                        layersCombo = new JComboBox();
224
                        layersCombo.setPreferredSize(new Dimension(0, 18));
225
                        ComboBoxModel comboModel = new DefaultComboBoxModel(getLayerList());
226
                        layersCombo.setModel(comboModel);
227
                        layersCombo.addActionListener(this);
228
                }
229
                return layersCombo;
230
        }
231
        
232
        
233
        /**
234
         * Gets a CheckBox
235
         * @return
236
         */
237
        public JCheckBox getSelectionCheck() {
238
                if(selectionOnly == null) {
239
                        selectionOnly = new JCheckBox(GeoProcessLocator.getGeoProcessManager().getTranslation("Selected_geometries"));
240
                }
241
                return selectionOnly;
242
        }
243
        
244
        /**
245
         * Panel with the projection selector
246
         * @return
247
         */
248
        private CRSSelectPanel getProjectionSelector() {
249
                if (projectionSrcSelector == null) {
250
                        targetLayerProjection = CRSFactory.getCRS("EPSG:23030");
251
                        projectionSrcSelector = CRSSelectPanel.getPanel(targetLayerProjection);
252
                        projectionSrcSelector.getJLabel().setText(GeoProcessLocator.getGeoProcessManager().getTranslation("Proyeccion_Destino"));
253
                        projectionSrcSelector.setPreferredSize(new java.awt.Dimension(330,35));
254
                        projectionSrcSelector.addActionListener(new java.awt.event.ActionListener() {
255
                                public void actionPerformed(java.awt.event.ActionEvent e) {
256
                                        if (projectionSrcSelector.isOkPressed()) {
257
                                                targetLayerProjection = projectionSrcSelector.getCurProj();
258
                                        }
259
                                }
260
                        });
261
                }
262
                projectionSrcSelector.setTransPanelActive(true);
263
                return projectionSrcSelector;
264
        }
265
        
266
        /**
267
         * Gets the label with the current projection
268
         * @return
269
         */
270
        public JLabel getCurrentProjLabel() {
271
                if(projLabel == null)
272
                        projLabel = new JLabel();
273
                return projLabel;
274
        }
275
        
276
        //------------------------------------------------------------
277
        
278
        /**
279
         * Initialize actions
280
         */
281
        private void init() {
282
                IVectorLayer layer = getSelectedVectorLayer();
283
                IProjection currentProj = (IProjection)layer.getCRS();
284
                getCurrentProjLabel().setText("Proj: " + currentProj.getAbrev());
285
        }
286
        
287
        /*
288
         * (non-Javadoc)
289
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
290
         */
291
        public void actionPerformed(ActionEvent e) {
292
                if(e.getSource() ==  getLayersCombo()) {
293
                        init();
294
                }
295
        }
296
        
297
        @Override
298
    public void assignParameters() {
299
                try {
300
                        ParametersSet params = m_Algorithm.getParameters();
301
                        params.getParameter(ReprojectAlgorithm.LAYER).setParameterValue(getSelectedVectorLayer());
302
                        params.getParameter(ReprojectAlgorithm.SELECTED_GEOM).setParameterValue(getSelectionCheck().isSelected());
303
                        String proj = getProjectionSelector().getCurProj().getFullCode();
304
                        params.getParameter(ReprojectAlgorithm.DST_PROJECTION).setParameterValue(proj);
305
                        
306
                        OutputObjectsSet ooSet = m_Algorithm.getOutputObjects();
307
                        Output outPol = ooSet.getOutput(ReprojectAlgorithm.RESULT_POL);
308
                        Output outLine = ooSet.getOutput(ReprojectAlgorithm.RESULT_LINE);
309
                        Output outPoint = ooSet.getOutput(ReprojectAlgorithm.RESULT_POINT);
310
                        
311
                        //Reponer estas l?neas para cambiar el panel de salida y comentar la siguiente
312
                        //out.setOutputChannel(new CompositeSourceOutputChannel(getAlgorithmOutputPanel().getOutputParameters()));
313
                        outPol.setOutputChannel(outputChannelSelectionPanelPol.getOutputChannel());
314
                        outLine.setOutputChannel(outputChannelSelectionPanelLine.getOutputChannel());
315
                        outPoint.setOutputChannel(outputChannelSelectionPanelPoint.getOutputChannel());
316
                } catch (Exception e) {
317
                        Sextante.addErrorToLog(e);
318
                }
319
        }
320

    
321
        @Override
322
        public void setOutputValue(String arg0, String arg1) {
323
                
324
        }
325

    
326
        @Override
327
        public void setParameterValue(String arg0, String arg1) {
328
                
329
        }
330
        
331
        /**
332
         * Gets the input layer list
333
         * @return
334
         */
335
        private ObjectAndDescription[] getLayerList() {
336
                IVectorLayer[] layers = SextanteGUI.getInputFactory()
337
                                        .getVectorLayers(IVectorLayer.SHAPE_TYPE_WRONG);
338
                ObjectAndDescription[] oad = new ObjectAndDescription[layers.length];
339
                for (int i = 0; i < layers.length; i++)
340
                        oad[i] = new ObjectAndDescription(layers[i].getName(), layers[i]);
341
                return oad;
342
        }
343
        
344
        /**
345
         * Gets the selected vector layer in the JComboBox
346
         * @return
347
         */
348
        private IVectorLayer getSelectedVectorLayer() {
349
                if(layersCombo.getSelectedItem() != null)
350
                        return (IVectorLayer)((ObjectAndDescription)layersCombo.getSelectedItem()).getObject();
351
                return null;
352
        }
353
        
354
        /**
355
         * Gets the field list of the selected layer
356
         * @return
357
         */
358
        public String[] getFieldList() {
359
                IVectorLayer layer = getSelectedVectorLayer();
360
                String[] data = new String[layer.getFieldCount()];
361
                for (int i = 0; i < layer.getFieldCount(); i++) 
362
                        data[i] = layer.getFieldName(i);
363
                return data;
364
        }
365
}