Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libJCRS / src / org / gvsig / crs / gui / CRSMainTrPanel.java @ 8262

History | View | Annotate | Download (13 KB)

1
package org.gvsig.crs.gui;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.CardLayout;
5
import java.awt.Dimension;
6
import java.awt.FlowLayout;
7
import java.awt.GridLayout;
8
import java.sql.ResultSet;
9
import java.sql.SQLException;
10
import javax.swing.JButton;
11
import javax.swing.JComboBox;
12
import javax.swing.JLabel;
13
import javax.swing.JPanel;
14
import javax.swing.ListSelectionModel;
15
import org.cresques.cts.IProjection;
16
import org.gvsig.crs.CrsException;
17
import org.gvsig.crs.CrsFactory;
18
import org.gvsig.crs.CrsWkt;
19
import org.gvsig.crs.EpsgConnection;
20
import org.gvsig.crs.ICrs;
21
import org.gvsig.crs.Query;
22
import org.gvsig.crs.gui.listeners.CRSMainTrPanelListener;
23
import org.gvsig.crs.gui.panels.TransformationEpsgPanel;
24
import org.gvsig.crs.gui.panels.TransformationManualPanel;
25
import org.gvsig.crs.gui.panels.TransformationNadgridsPanel;
26
import com.iver.andami.PluginServices;
27
import com.iver.andami.ui.mdiManager.IWindow;
28
import com.iver.andami.ui.mdiManager.WindowInfo;
29

    
30
public class CRSMainTrPanel extends JPanel implements IWindow{
31

    
32
        private static final long serialVersionUID = 1L;
33
        
34
        /*
35
         * Para mostrar los parametros si tenemos seleccionada transformacion
36
         */
37
        boolean tra = false; 
38
        boolean inAnApplet = true;
39
        private boolean cancelYes = false;
40
        private JButton jButtonCancel = null;
41
        private JButton jButtonNext = null;
42
        private JButton jButtonAccept = null;
43
        private JButton jButtonBefore = null;
44
        private JPanel jPanelButtons = null;
45
        
46
        boolean targetNad = false;        
47
        
48
        int crs_target = -1;
49
        CrsWkt crsWkt_target = null;
50
        
51
        //private EpsgConnection connection = null;
52
        
53
        int transformation_code = 0;        
54
        
55
        private JPanel panel = null;
56
        CRSMainPanel viewPan = null;
57
        
58
        private JPanel jPanelMain = null;
59
        private TransformationManualPanel manualTrPanel = null;
60
        private boolean manual_tr = false;
61
        private TransformationEpsgPanel epsgTrPanel = null;
62
        private boolean epsg_tr = false;
63
        private TransformationNadgridsPanel nadsTrPanel = null;
64
        private boolean nads_tr = false;
65
        
66
        private boolean sin_tr = false;
67
        private JPanel jPanelCombo = null;
68
        private JComboBox jComboOptions = null;
69
        
70
        private IProjection crsfirst;
71
        
72
        private CRSMainPanel crsMainPanel;
73
        private String newSelection;
74
        String dataSource = "";
75
        ICrs curProj = null;
76
        
77
        public CRSMainTrPanel(int target, CrsWkt crsWkttarget, ICrs proj) {                        
78
                curProj = proj;
79
                crsMainPanel = new CRSMainPanel(target);                
80
                viewPan = crsMainPanel;
81
                
82
                crs_target = target;
83
                crsWkt_target = crsWkttarget;                        
84
                
85
                manualTrPanel = new TransformationManualPanel();
86
                epsgTrPanel = new TransformationEpsgPanel(crs_target);
87
                nadsTrPanel = new TransformationNadgridsPanel();
88
                
89
                /*
90
                 * esta variable contendr? tanto el panel utilizado en CRSViewPanel, como los paneles
91
                 * que seran necesarios para realizar las transformaciones
92
                 */
93
                jPanelMain = new JPanel();
94
                jPanelMain.setLayout(new CardLayout());                
95
                jPanelMain.add("primero", viewPanel());
96
                jPanelMain.add("manual", manualTrPanel.getJPanel());
97
                jPanelMain.add("epsg", epsgTrPanel.getJPanel());
98
                jPanelMain.add("nad", nadsTrPanel.getJPanel());
99
                                
100
                this.add(jPanelMain, BorderLayout.CENTER);
101
                
102
                this.add(getButtons(), BorderLayout.SOUTH);
103
                
104
                setListeners();
105
                /*
106
                 * cargamos en la capa el CRS que hemos fijado en la vista en el primer caso
107
                 * o el que pusimos en la ultima eleccion del crs para la capa
108
                 */                
109
                
110
                /*habra que hacerlo para que lo printe en el primer panel que pongamos
111
                 * en nuestro caso seria en el de recientes
112
                 */
113
                /*String sour = curProj.getCrsWkt().getAuthority()[0];
114
                if (sour.equals("EPSG")){
115
                        crsMainPanel.getEpsgPanel().loadViewCRS(curProj.getCode());
116
                        crsMainPanel.getEpsgPanel().getJTable().setRowSelectionInterval(0,0);
117
                }else if(sour.equals("IAU2000")){
118
                        crsMainPanel.getIauPanel().loadViewCRS(curProj.getCode());
119
                        crsMainPanel.getIauPanel().getJTable().setRowSelectionInterval(0,0);
120
                }*/
121
                
122
                setDataSource(crsMainPanel.getDataSource());
123
                
124
                crsMainPanel.getRecentsPanel().loadRecents();
125
        }
126
        
127
        /*
128
         * Este metodo cargara todo el panel utilizado en el CRSViewPanel y el combobox de
129
         * las transformaciones
130
         */
131
        private JPanel viewPanel(){
132
                JPanel integro = new JPanel();
133
                integro.setLayout(new GridLayout(0,1));
134
                integro.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
135
                integro.setPreferredSize(new Dimension(560,300));
136
                
137
                integro.add(viewPan.capa(), null);
138
                integro.add(getJPanel(), null);
139
                return integro;
140
        }
141
        
142
         
143
        private JPanel getJPanel() {
144
                if (panel == null){
145
                        panel = new JPanel();
146
                        panel.setPreferredSize(new Dimension(540,80));
147
                        panel.setLayout(new GridLayout(0,2));
148
                        panel.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));                        
149
                        panel.add(getCombopanel(), null);                        
150
                }
151
                return panel;
152
        }        
153
        
154
        public JPanel getCombopanel(){
155
                if (jPanelCombo == null){
156
                        jPanelCombo = new JPanel();
157
                        jPanelCombo.setPreferredSize(new Dimension(400,30));                        
158
                        jPanelCombo.add(getJLabelTrans());
159
                        jPanelCombo.add(getJComboOptions());
160
                }
161
                
162
                return jPanelCombo;
163
        }
164
        
165
        private JLabel getJLabelTrans(){
166
                JLabel jLabelTrans = new JLabel();
167
                jLabelTrans.setPreferredSize(new Dimension(180, 25));
168
                jLabelTrans.setText(PluginServices.getText(this, "Seleccione Transformaci?n: "));
169
                return jLabelTrans;
170
        }
171
        
172
        public JComboBox getJComboOptions(){
173
                if (jComboOptions == null){
174
                        String[] selection = {"Sin transformacion", "Transformacion manual", 
175
                                        "+nadgrids", "Transformacion EPSG"}; 
176
                        jComboOptions = new JComboBox(selection);
177
                        jComboOptions.setPreferredSize(new Dimension(150,25));        
178
                        jComboOptions.setEnabled(false);
179
                        jComboOptions.setEditable(false);                        
180
                        jComboOptions.setSelectedIndex(0);
181
                        newSelection = (String) jComboOptions.getSelectedItem();                        
182
                }
183
//                jComboOptions.addActionListener(this);
184
                return jComboOptions;
185
        }
186
        
187
        private JPanel getButtons() {
188
                if(jPanelButtons == null) {
189
                        jPanelButtons = new JPanel();
190
                        jPanelButtons.setPreferredSize(new Dimension(550,50));
191
                        jPanelButtons.setLayout(new GridLayout(0,1));
192
                        jPanelButtons.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5));
193
                        jPanelButtons.add(getJButtonCancel(), null);
194
                        jPanelButtons.add(getJButtonBefore(), null);
195
                        jPanelButtons.add(getJButtonNext(), null);
196
                        jPanelButtons.add(getJButtonAccept(), null);
197
                }
198
                return jPanelButtons;
199
        }
200
        
201
        public JButton getJButtonBefore(){
202
                if(jButtonBefore == null) {
203
                        jButtonBefore = new JButton();
204
                        jButtonBefore.setText(PluginServices.getText(this,"Anterior"));
205
                        jButtonBefore.setMnemonic('B');                        
206
                        jButtonBefore.setPreferredSize(new Dimension(100,25));                        
207
                        jButtonBefore.setEnabled(false);
208
//                        jButtonBefore.addActionListener(this);
209
                }
210
                return jButtonBefore;
211
        }
212
        
213
        public JButton getJButtonAccept() {
214
                if(jButtonAccept == null) {
215
                        jButtonAccept = new JButton();
216
                        jButtonAccept.setText(PluginServices.getText(this,"Finalizar"));
217
                        jButtonAccept.setMnemonic('O');
218
                        jButtonAccept.setVisible(true);
219
                        jButtonAccept.setPreferredSize(new Dimension(100,25));
220
//                        jButtonAccept.addActionListener(this);
221
                }
222
                return jButtonAccept;
223
        }
224
        
225
        public JButton getJButtonNext() {
226
                if(jButtonNext == null) {
227
                        jButtonNext = new JButton();
228
                        jButtonNext.setText(PluginServices.getText(this,"Siguiente"));
229
                        jButtonNext.setMnemonic('S');
230
                        jButtonNext.setVisible(false);
231
                        jButtonNext.setPreferredSize(new Dimension(100,25));
232
//                        jButtonNext.addActionListener(this);
233
                }
234
                return jButtonNext;
235
        }
236
                
237
        public JButton getJButtonCancel() {
238
                if(jButtonCancel == null) {
239
                        jButtonCancel = new JButton();
240
                        jButtonCancel.setText(PluginServices.getText(this,"Cancelar"));
241
                        jButtonCancel.setMnemonic('C');
242
                        jButtonCancel.setPreferredSize(new Dimension(100,25));
243
//                        jButtonCancel.addActionListener(this);
244
                }
245
                return jButtonCancel;
246
        }
247
        
248
        public void setTargetNad(boolean tarNad){
249
                targetNad = tarNad;
250
        }
251
        
252
        public boolean getTargetNad(){
253
                return targetNad;
254
        }
255
        
256
        /*
257
         * revisar esta solucion
258
         */
259
        public ICrs getProjection() {
260
                if (sin_tr) {
261
                        ICrs crs;
262
                        try {
263
                                if (getDataSource().equals("EPSG")){
264
                                        crs = new CrsFactory().getCRS(crsMainPanel.getEpsgPanel().getCodeCRS(),crsMainPanel.getEpsgPanel().getWKT());
265
                                }
266
                                else if (getDataSource().equals("IAU2000")){
267
                                        crs = new CrsFactory().getCRS(crsMainPanel.getIauPanel().getCodeCRS(),crsMainPanel.getIauPanel().getWKT());
268
                                } 
269
                                else if (getDataSource().equals("Recientes")){
270
                                        crs = new CrsFactory().getCRS(crsMainPanel.getRecentsPanel().getCodeCRS(),crsMainPanel.getRecentsPanel().getWKT());
271
                                } else {
272
                                        sin_tr = false;
273
                                        return null;
274
                                }
275
                                sin_tr = false;
276
                                return crs;
277
                        } catch (CrsException e) {
278
                                e.printStackTrace();
279
                        }
280
                        return null;
281
                }                
282
                return (ICrs) crsfirst;                
283
        }
284
        
285
        public void setProjection(IProjection proj) {
286
                crsfirst = proj;
287
        }
288
        
289
        private void setListeners(){
290

    
291
                CRSMainTrPanelListener listener = new CRSMainTrPanelListener(this);
292
                
293
                jButtonAccept.addActionListener(listener);
294
                jButtonBefore.addActionListener(listener);
295
                jButtonCancel.addActionListener(listener);
296
                jButtonNext.addActionListener(listener);
297
                crsMainPanel.getJComboOptions().addItemListener(listener);
298
                getJComboOptions().addActionListener(listener);
299
                
300
                ListSelectionModel rowSM = crsMainPanel.getEpsgPanel().getJTable().getSelectionModel();
301
                rowSM.addListSelectionListener(listener);
302
                
303
                ListSelectionModel rowSMiau = crsMainPanel.getIauPanel().getJTable().getSelectionModel();
304
                rowSMiau.addListSelectionListener(listener);
305
                
306
                ListSelectionModel rowSMrecents = crsMainPanel.getRecentsPanel().getJTable().getSelectionModel();
307
                rowSMrecents.addListSelectionListener(listener);
308
                
309
                crsMainPanel.getEsriPanel().getJTextOpen().getDocument().addDocumentListener(listener);
310
        }
311
        
312
        public void compareDatum(String wktSource){
313
                CrsWkt crsWkt_source = new CrsWkt(wktSource);
314
                
315
                if (!crsWkt_source.getSpheroid()[1].equals(crsWkt_target.getSpheroid()[1])){
316
                        jComboOptions.setEnabled(true);
317
                }
318
                else if (!crsWkt_source.getSpheroid()[2].equals(crsWkt_target.getSpheroid()[2])){
319
                        jComboOptions.setEnabled(true);
320
                }
321
                else jComboOptions.setEnabled(false);
322
                
323
                /*connection = new EpsgConnection();
324
                connection.setConnectionEPSG();
325
                String datum = "";
326
                int datum_code = -1;
327
                String sentence = "SELECT source_geogcrs_code " +
328
                                                "FROM epsg_coordinatereferencesystem " +
329
                                                "WHERE coord_ref_sys_code = "+ base ;
330
                ResultSet result = Query.select(sentence,connection.getConnection());
331
                int source = 0;
332
                try {
333
                        result.next();
334
                        source = result.getInt("source_geogcrs_code");
335
                } catch (SQLException e1) {
336
                        e1.printStackTrace();
337
                }                                
338
            
339
            if (source != 0){
340
                            base = source;                                    
341
            }
342
            
343
            
344
             * Recuperamos el Datum del CRS que esta seleccionado de manera provisional
345
             * y realizamos la comparacion para saber si, en caso de elegir el crs que
346
             * tenemos seleccionado, se puede producir una transformacion
347
             
348
            sentence = "SELECT datum_code " +
349
                        "FROM epsg_coordinatereferencesystem " +
350
                        "WHERE coord_ref_sys_code = "+ base ;
351
            result = Query.select(sentence,connection.getConnection());
352
            
353
            try {
354
                        result.next();
355
                        datum_code = result.getInt("datum_code");
356
                } catch (SQLException e1) {
357
                        e1.printStackTrace();
358
                }        
359
                
360
                sentence = "SELECT datum_name " +
361
                                        "FROM epsg_datum " +
362
                                        "WHERE datum_code = "+ datum_code ;
363
            result = Query.select(sentence,connection.getConnection());
364
            
365
            try {
366
                        result.next();
367
                        datum = result.getString("datum_name");
368
                } catch (SQLException e1) {
369
                        e1.printStackTrace();
370
                }        
371
                    
372
                if (!(crsWkt_target.equals(datum.replaceAll(" ","")))){
373
                        jComboOptions.setEnabled(true);
374
                }
375
                else {
376
                        jComboOptions.setEnabled(false);
377
                }*/
378
        }
379
        
380

    
381
        
382
        public void setDataSource(String sour){
383
                dataSource = sour;
384
        }
385
        
386
        public String getDataSource(){
387
                return crsMainPanel.getDataSource();
388
        }
389
        
390
        public WindowInfo getWindowInfo() {
391
                WindowInfo m_viewinfo=new WindowInfo(WindowInfo.MODALDIALOG);
392
                   m_viewinfo.setTitle(PluginServices.getText(this,"CrsView"));
393
                return m_viewinfo;
394
        }
395

    
396

    
397

    
398

    
399

    
400

    
401

    
402

    
403

    
404

    
405

    
406

    
407

    
408
        public CRSMainPanel getCrsMainPanel() {
409
                return crsMainPanel;
410
        }
411

    
412
        public TransformationEpsgPanel getEpsgTrPanel() {
413
                return epsgTrPanel;
414
        }
415

    
416
        public TransformationManualPanel getManualTrPanel() {
417
                return manualTrPanel;
418
        }
419

    
420
        public TransformationNadgridsPanel getNadsTrPanel() {
421
                return nadsTrPanel;
422
        }
423

    
424
        public boolean isEpsg_tr() {
425
                return epsg_tr;
426
        }
427

    
428
        public boolean isManual_tr() {
429
                return manual_tr;
430
        }
431

    
432
        public boolean isNads_tr() {
433
                return nads_tr;
434
        }
435

    
436
        public boolean isSin_tr() {
437
                return sin_tr;
438
        }
439

    
440
        public void setEpsg_tr(boolean epsg_tr) {
441
                this.epsg_tr = epsg_tr;
442
        }
443

    
444
        public void setManual_tr(boolean manual_tr) {
445
                this.manual_tr = manual_tr;
446
        }
447

    
448
        public void setNads_tr(boolean nads_tr) {
449
                this.nads_tr = nads_tr;
450
        }
451

    
452
        public void setSin_tr(boolean sin_tr) {
453
                this.sin_tr = sin_tr;
454
        }
455

    
456
        public boolean isCancelYes() {
457
                return cancelYes;
458
        }
459

    
460
        public void setCancelYes(boolean cancelYes) {
461
                this.cancelYes = cancelYes;
462
        }
463

    
464
        public IProjection getCrsfirst() {
465
                return crsfirst;
466
        }
467

    
468
        public JPanel getJPanelMain() {
469
                return jPanelMain;
470
        }
471

    
472
        public String getNewSelection() {
473
                return newSelection;
474
        }
475

    
476
        public void setNewSelection(String newSelection) {
477
                this.newSelection = newSelection;
478
        }
479

    
480
        /*public EpsgConnection getConnection() {
481
                return connection;
482
        }
483

484
        public void setConnection(EpsgConnection connect) {
485
                this.connection = connect;
486
        }*/
487
}