Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extJCRS / src / org / gvsig / crs / gui / panels / TransformationRecentsPanel.java @ 20637

History | View | Annotate | Download (14.7 KB)

1 11458 jlgomez
/* gvSIG. Sistema de Informacin Geogrfica de la Generalitat Valenciana
2 10301 dguerrero
 *
3
 * Copyright (C) 2006 Instituto de Desarrollo Regional and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23 11458 jlgomez
 *   Av. Blasco Ibez, 50
24 10301 dguerrero
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
34
 *   Campus Universitario s/n
35
 *   02071 Alabacete
36
 *   Spain
37
 *
38
 *   +34 967 599 200
39
 */
40
41
package org.gvsig.crs.gui.panels;
42
43 10786 lmfernandez
import java.awt.BorderLayout;
44 10301 dguerrero
import java.awt.FlowLayout;
45
46
import javax.swing.BorderFactory;
47
import javax.swing.JButton;
48
import javax.swing.JPanel;
49
import javax.swing.JScrollPane;
50
import javax.swing.JTable;
51
import javax.swing.ListSelectionModel;
52
import javax.swing.table.DefaultTableModel;
53
import javax.swing.table.TableColumn;
54
55
import org.gvsig.crs.CrsException;
56
import org.gvsig.crs.CrsFactory;
57
import org.gvsig.crs.ICrs;
58 12541 jlgomez
import org.gvsig.crs.ogr.TransEPSG;
59
import org.gvsig.crs.persistence.CompTrData;
60 10301 dguerrero
import org.gvsig.crs.persistence.RecentCRSsPersistence;
61
import org.gvsig.crs.persistence.RecentTrsPersistence;
62
import org.gvsig.crs.persistence.TrData;
63
64
import com.iver.andami.PluginServices;
65
import com.iver.cit.gvsig.gui.TableSorter;
66
67 11458 jlgomez
import es.idr.teledeteccion.connection.EpsgConnection;
68
69 10301 dguerrero
/**
70 11458 jlgomez
 * Panel para la gestin de las transformaciones recientes
71
 * @author Jos Luis Gmez Martnez (jolugomar@gmail.com)
72
 * @author Luisa Marina Fernndez (luisam.fernandez@uclm.es)
73 10301 dguerrero
 *
74
 */
75
public class TransformationRecentsPanel extends JPanel {
76 10786 lmfernandez
77
        private static final long serialVersionUID = 1L;
78 10301 dguerrero
        int code = 0;
79
        private JTable transformationTable;
80
        private JScrollPane jScrollPane = null;
81
        public DefaultTableModel dtm = null;
82
        public TableSorter sorter = null;
83
        JButton JButtonInfo = null;
84
        public int selectedRowTable = -1;
85
        private TrData[] trDataArray;
86
87
        private String cadWKT = "";
88
        private String params ="";
89
        public EpsgConnection connect = null;
90
        boolean inverseTransformation = false;
91
        int trCode;
92
        boolean targetNad = false;
93 12408 jlgomez
        String sourceAbrev = null;
94 10301 dguerrero
95
        public TransformationRecentsPanel() {
96
                initialize();
97
        }
98
99
        /**
100
         * Genera el panel contenedor de las transformaciones recientes
101
         * @return
102
         */
103
        private void initialize(){
104
                connect = new EpsgConnection();
105
                connect.setConnectionEPSG();
106 10786 lmfernandez
                        //**setLayout(new GridLayout(2,1));
107
                        //**setLayout(new FlowLayout(FlowLayout.LEADING,5,10));
108
                        //**setPreferredSize(new Dimension(525, 100));
109
                setLayout(new BorderLayout());
110
                setBorder(
111 10301 dguerrero
                                    BorderFactory.createCompoundBorder(
112
                                                        BorderFactory.createCompoundBorder(
113
                                                                        BorderFactory.createTitledBorder(PluginServices.getText(this,"recents_transformation")),
114
                                                                        BorderFactory.createEmptyBorder(2,2,2,2)),
115
                                                                        getBorder()));
116 10786 lmfernandez
                JPanel p=new JPanel();
117
                p.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
118
                p.add(getJButtonInfo());
119
                add(p,BorderLayout.NORTH);
120
                add(getJScrollPane(),BorderLayout.CENTER);
121 10301 dguerrero
                        //loadRecents();
122
        }
123
124
        public JTable getJTable() {
125
                if (transformationTable == null) {
126
                        String[] columnNames= {PluginServices.getText(this,"transformation"),
127
                                        PluginServices.getText(this,"name"),
128
                                        PluginServices.getText(this,"source_crs"),
129
                                        PluginServices.getText(this,"target_crs"),
130
                                        PluginServices.getText(this,"detalles"),};
131
                        Object[][]data = {};
132
                        dtm = new DefaultTableModel(data, columnNames)
133
                        {
134 10786 lmfernandez
                                private static final long serialVersionUID = 1L;
135 10301 dguerrero
                                public boolean isCellEditable(int row, int column) {
136
                                        return false;
137
                                }
138
                                /*
139
                                 * metodo necesario para cuando utilizamos tablas ordenadas
140
                                 * ya que sino al ordenar por algun campo no se queda con el orden
141
                                 * actual al seleccionar una fila
142
                                 * @see javax.swing.table.TableModel#getColumnClass(int)
143
                                 */
144
                                public Class getColumnClass(int column)
145
                                {
146
                                        return getValueAt(0, column).getClass();
147
                                }
148
                        };
149
                        sorter = new TableSorter(dtm);
150
151
                        transformationTable = new JTable(sorter);
152
                        sorter.setTableHeader(transformationTable.getTableHeader());
153
                        transformationTable.setCellSelectionEnabled(false);
154
                        transformationTable.setRowSelectionAllowed(true);
155
                        transformationTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
156
                        transformationTable.setColumnSelectionAllowed(false);
157
                        transformationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
158
                        TableColumn column = null;
159
                        for (int i = 0; i < columnNames.length; i++) {
160
                            column = transformationTable.getColumnModel().getColumn(i);
161
                            if (i == 0) {
162
                                    column.setPreferredWidth(80);
163
                            }
164
                            else if(i == 4) {
165
                                    column.setPreferredWidth(200);
166
                            }
167
                            else {
168
                                column.setPreferredWidth(100);
169
                            }
170
                        }
171
                }
172
                return transformationTable;
173
        }
174
175
        private JScrollPane getJScrollPane() {
176
                if (jScrollPane == null) {
177
                        jScrollPane = new JScrollPane();
178 10786 lmfernandez
                        //jScrollPane.setPreferredSize(new Dimension(525,200));
179 10301 dguerrero
                        jScrollPane.setBorder(
180
                                    BorderFactory.createCompoundBorder(
181
                                        BorderFactory.createCompoundBorder(
182
                                                        BorderFactory.createTitledBorder(PluginServices.getText(this,"transformations")),
183 10786 lmfernandez
                                                        BorderFactory.createEmptyBorder(12,5,70,5)),
184 10301 dguerrero
                                                        jScrollPane.getBorder()));
185
                        jScrollPane.setViewportView(getJTable());
186
                }
187
                return jScrollPane;
188
        }
189
190
        public JButton getJButtonInfo() {
191
                if(JButtonInfo == null) {
192
                        JButtonInfo = new JButton();
193 10786 lmfernandez
                        //Poner: JButtonInfo.setPreferredSize(new Dimension(100,20));
194 10301 dguerrero
                        JButtonInfo.setText(PluginServices.getText(this,"info_transformations"));
195
                        JButtonInfo.setMnemonic('I');
196
                        JButtonInfo.setEnabled(false);
197
                }
198
                return JButtonInfo;
199
        }
200
201
        /**
202
         * Consigue el crs elegido de las transformaciones
203 11458 jlgomez
         * recientes cuando el se utiliza transformacin EPSG o manual
204 10301 dguerrero
         * @return
205
         */
206
        public ICrs getProjection() {
207
                ICrs crs = null;
208
                try {
209 12408 jlgomez
                        String[] sourceAuthority = getSourceAbrev().split(":");
210 11458 jlgomez
                        //crs = new CrsFactory().getCRS(getCode(), getWKT(),getParams());
211 12408 jlgomez
                        crs = new CrsFactory().getCRS(sourceAuthority[0]+":"+getCode());
212 11958 dguerrero
                        crs.setTransformationParams(getParams(),null);
213 10301 dguerrero
                } catch (CrsException e) {
214
                        e.printStackTrace();
215
                }
216
                return crs;
217
        }
218
219
        /**
220 12541 jlgomez
         * Consigue el crs elegido de las transformaciones recientes compuestas
221
         * cuando se utiliza una transformacion compuesta
222
         * @param info
223
         * @return
224
         */
225
        public ICrs getProjectionComplex(String details) {
226
                ICrs crs = null;
227
                RecentTrsPersistence trPersistence = new RecentTrsPersistence();
228
                TrData crsTrDataArray[] = trPersistence.getArrayOfTrData();
229
                CompTrData comp = null;
230
                String sourceTransformation = null;
231
                String targetTransformation = null;
232
                for (int iRow = crsTrDataArray.length-1; iRow >= 0; iRow--) {
233
                        if (details.equals(crsTrDataArray[iRow].getDetails())) {
234
                                if (crsTrDataArray[iRow] instanceof CompTrData) {
235
                                        comp = (CompTrData) crsTrDataArray[iRow];
236
                                        break;
237
                                }
238
                        }
239
                }
240
241
                if (comp.getFirstTr().getAuthority().equals(PluginServices.getText(this, "EPSG"))) {
242
                        TransEPSG epsgParams = new TransEPSG(comp.getFirstTr().getCode(),connect, getInverseTransformation());
243
                        setParamsEPGS(epsgParams.getParamValue());
244
                        sourceTransformation = getParams();
245
                } else if (comp.getFirstTr().getAuthority().equals(PluginServices.getText(this, "USR"))) {
246
                        //mirar si funciona y lleva los [  ]
247
                        setParamsManual(comp.getFirstTr().getDetails());
248
                        sourceTransformation = getParams();
249
                } else if (comp.getFirstTr().getAuthority().equals(PluginServices.getText(this, "NADGR"))) {
250
                        String info = comp.getFirstTr().getDetails();
251
                        String[] partes = info.split("\\(");
252
                        String nadFile = partes[0];
253
                        sourceTransformation = "+nadgrids="+nadFile;
254
                }
255
256
                if (comp.getSecondTr().getAuthority().equals(PluginServices.getText(this, "EPSG"))) {
257
                        TransEPSG epsgParams = new TransEPSG(comp.getSecondTr().getCode(),connect, getInverseTransformation());
258
                        setParamsEPGS(epsgParams.getParamValue());
259
                        targetTransformation = getParams();
260
                } else if (comp.getSecondTr().getAuthority().equals(PluginServices.getText(this, "USR"))) {
261
                        //mirar si funciona y lleva los [  ]
262
                        setParamsManual(comp.getSecondTr().getDetails());
263
                        targetTransformation = getParams();
264
                } else if (comp.getSecondTr().getAuthority().equals(PluginServices.getText(this, "NADGR"))) {
265
                        String info = comp.getSecondTr().getDetails();
266
                        String[] partes = info.split("\\(");
267
                        String nadFile = partes[0];
268
                        targetTransformation = "+nadgrids="+nadFile;
269
                }
270
271
                try {
272
                        crs = new CrsFactory().getCRS(getSourceAbrev());
273
                        crs.setTransformationParams(sourceTransformation,targetTransformation);//nadFile);
274
                        return crs;
275
                } catch (org.gvsig.crs.CrsException e) {
276
                        e.printStackTrace();
277
                }
278
279
                return crs;
280
        }
281
282
        /**
283 10301 dguerrero
         * Consigue el crs elegido de las transformaciones
284 11458 jlgomez
         * recientes cuando se utiliza transformacin de rejillas
285 10301 dguerrero
         * @param info
286
         * @return
287
         */
288
        public ICrs getProjectionNad(String info) {
289
                String[] partes = info.split("\\(");
290
                String nadFile = partes[0];
291
                int codigoNad = Integer.parseInt((partes[1].substring(0,partes[1].length()-1)).split(":")[1]);
292
                ICrs crs;
293 12408 jlgomez
                String[] sourceAuthority = getSourceAbrev().split(":");
294 10301 dguerrero
295
                if (getCode() == codigoNad){
296
                        try {
297
                                setNad(false);
298 11458 jlgomez
                                //Siempre EPSG porque solo permitimos transformaciones
299
                                //en el caso en que source y target sean de la EPSG
300 12408 jlgomez
                                crs = new CrsFactory().getCRS(sourceAuthority[0]+":"+getCode());
301 11958 dguerrero
                                crs.setTransformationParams("+nadgrids="+nadFile,null);//nadFile);
302 10301 dguerrero
                                return crs;
303
                        } catch (org.gvsig.crs.CrsException e) {
304
                                e.printStackTrace();
305
                        }
306
                        return null;
307
                }
308
                else {
309
                        setNad(true);
310
                        try {
311 12408 jlgomez
                                crs = new CrsFactory().getCRS(sourceAuthority[0]+":"+getCode());
312 11958 dguerrero
                                crs.setTransformationParams(null,"+nadgrids="+nadFile);//nadFile);
313 10301 dguerrero
314
                                return crs;
315
                        } catch (CrsException e) {
316
                                e.printStackTrace();
317
                        }
318
                        return null;
319
                }
320
        }
321
322
        /**
323
         *
324
         * @param nadg Define si el fichero rejillas se calcula en el crs fuente o destino
325
         */
326
        public void setNad(boolean nadg){
327
                targetNad = nadg;
328
        }
329
330
        /**
331
         *
332
         * @return Devuelve si el fichero de rejillas se calcula en el crs fuente o destino
333
         */
334
        public boolean getNad(){
335
                return targetNad;
336
        }
337
338
        /**
339
         *
340 11458 jlgomez
         * @param cod Cdigo del CRS elegido
341 10301 dguerrero
         */
342
        public void setCode(int cod){
343
                code = cod;
344
        }
345
346
        /**
347
         *
348 11458 jlgomez
         * @return Devuelve el cdigo del CRS elegido
349 10301 dguerrero
         */
350
        public int getCode(){
351
                return code;
352
        }
353
354
        /**
355
         *
356
         * @param cad Cadena wkt del crs fuente
357
         */
358
        public void setWKT(String cad){
359
                cadWKT = cad;
360
        }
361
362
        /**
363
         *
364
         * @return Devuelve la cadena wkt del crs fuente
365
         */
366
        public String getWKT(){
367
                return cadWKT;
368
        }
369
370
        /**
371
         *
372 11458 jlgomez
         * @param param Hacemos la cadena con los parmetros de la transformacin manual
373 10301 dguerrero
         */
374
        public void setParamsManual(String param){
375
                params = "+towgs84="+param.substring(1,param.length()-1)+" ";
376
        }
377
378
        /**
379
         *
380 11458 jlgomez
         * @param values Hacemos la cadena con los parmetros de la transformacin EPSG
381 10301 dguerrero
         */
382
        public void setParamsEPGS(String[] values){
383
                params = "+towgs84="+values[0];
384
                for(int i = 1; i < values.length; i++)
385
                        params +=","+values[i];
386
                params += " ";
387
        }
388
389
        /**
390
         *
391
         * @param nadfile
392
         */
393
        public void setParamsNads(String nadfile){
394
395
        }
396
397
        /**
398
         *
399 11458 jlgomez
         * @return Deuelve una cadena con los parmetros de la transformacin
400 10301 dguerrero
         */
401
        public String getParams(){
402
                return params;
403
        }
404
405
        /**
406
         *
407 11458 jlgomez
         * @param inverse Parmetro que define si la transformacin es directa o inversa
408 10301 dguerrero
         */
409
        public void setInverseTransformation(boolean inverse){
410
                inverseTransformation = inverse;
411
        }
412
413
        /**
414
         *
415 11458 jlgomez
         * @return Devuelve si es una transformacin directa o inversa
416 10301 dguerrero
         */
417
        public boolean getInverseTransformation(){
418
                return inverseTransformation;
419
        }
420
421
        /**
422
         *
423 11458 jlgomez
         * @param code Cdigo de la transformacin EPGS elegida
424 10301 dguerrero
         */
425
        public void setTrCode(int code){
426
                trCode = code;
427
        }
428
429
        /**
430
         *
431 11458 jlgomez
         * @return Devuelve el cdigo de la transformacin
432 10301 dguerrero
         */
433
        public int getTrCode(){
434
                return trCode;
435
        }
436
437
        /**
438
         * Carga en la tabla los CRSs leidos del sistema de persistencia.
439
         */
440 12408 jlgomez
        public void loadRecents(String source, String target){
441
                setSourceAbrev(source);
442 10786 lmfernandez
                //                Eliminar filas en cada nueva bsqueda
443
                int numRow = dtm.getRowCount();
444
                while (numRow != 0) {
445
                        numRow = numRow - 1;
446
                        dtm.removeRow(numRow);
447
                }
448 20637 dguerrero
                RecentTrsPersistence persistence = new RecentTrsPersistence();
449 10301 dguerrero
                trDataArray = persistence.getArrayOfTrData();
450
451
452
                for (int iRow = trDataArray.length-1;iRow>=0;iRow--){
453 12408 jlgomez
                        String crsSource = ((String)trDataArray[iRow].getCrsSource());
454
                        String crsTarget = ((String)trDataArray[iRow].getCrsTarget());
455
                        if(source.equals(crsSource) && target.equals(crsTarget)){
456 10301 dguerrero
                                Object row[] ={trDataArray[iRow].getAuthority()+":"+trDataArray[iRow].getCode(),trDataArray[iRow].getName(),trDataArray[iRow].getCrsSource(),
457
                                        trDataArray[iRow].getCrsTarget(),trDataArray[iRow].getDetails()};
458
                                dtm.addRow(row);
459
                        }
460
                }
461
462
                /*
463
                /*Seleccionar el primer registro.
464
                 */
465
                int numr = dtm.getRowCount();
466
                if (numr != 0 )
467
                        this.getJTable().setRowSelectionInterval(0,0);
468
        }
469 11987 jlgomez
470
        /**
471
         * Carga en la tabla los CRSs leidos del sistema de persistencia, para
472
         * las transformaciones compuestas
473
         */
474 12408 jlgomez
        public void loadRecentsCompuesta(String source){
475 11987 jlgomez
476
                //                Eliminar filas en cada nueva bsqueda
477
                int numRow = dtm.getRowCount();
478
                while (numRow != 0) {
479
                        numRow = numRow - 1;
480
                        dtm.removeRow(numRow);
481
                }
482 20637 dguerrero
                RecentTrsPersistence persistence = new RecentTrsPersistence();
483 11987 jlgomez
                trDataArray = persistence.getArrayOfTrData();
484
485 10301 dguerrero
486 11987 jlgomez
                for (int iRow = trDataArray.length-1;iRow>=0;iRow--){
487 12541 jlgomez
                        if (trDataArray[iRow] instanceof CompTrData) {
488
                                continue;
489
                        } else {
490
                                String crsSource = ((String)trDataArray[iRow].getCrsSource());
491
                                String crsTarget = ((String)trDataArray[iRow].getCrsTarget());
492
                                if(source.equals(crsSource) || source.equals(crsTarget)){
493
                                        Object row[] ={trDataArray[iRow].getAuthority()+":"+trDataArray[iRow].getCode(),trDataArray[iRow].getName(),trDataArray[iRow].getCrsSource(),
494
                                                trDataArray[iRow].getCrsTarget(),trDataArray[iRow].getDetails()};
495
                                        dtm.addRow(row);
496
                                }
497 11987 jlgomez
                        }
498
                }
499
500
                /*
501
                /*Seleccionar el primer registro.
502
                 */
503
                int numr = dtm.getRowCount();
504
                if (numr != 0 )
505
                        this.getJTable().setRowSelectionInterval(0,0);
506
        }
507 12408 jlgomez
508
        public void setSourceAbrev(String source) {
509
                sourceAbrev = source;
510
        }
511
512
        public String getSourceAbrev() {
513
                return sourceAbrev;
514
        }
515 11987 jlgomez
516 10301 dguerrero
}