Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extGeocoding / src / org / gvsig / geocoding / gui / GeocodingPanel.java @ 27140

History | View | Annotate | Download (34.9 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
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
 */
22

    
23
/*
24
 * AUTHORS (In addition to CIT):
25
 * 2008 Prodevelop S.L. vsanjaime Programador
26
 */
27
package org.gvsig.geocoding.gui;
28

    
29
import java.awt.Dimension;
30
import java.awt.GridBagConstraints;
31
import java.awt.event.MouseAdapter;
32
import java.awt.event.MouseEvent;
33
import java.awt.event.MouseListener;
34
import java.io.File;
35
import java.util.List;
36

    
37
import javax.swing.ButtonGroup;
38
import javax.swing.DefaultComboBoxModel;
39
import javax.swing.ImageIcon;
40
import javax.swing.JPanel;
41
import javax.swing.SwingConstants;
42
import javax.swing.table.JTableHeader;
43
import javax.swing.table.TableColumn;
44

    
45
import org.gvsig.geocoding.extension.GeocoController;
46
import org.gvsig.geocoding.gui.dynamic.OneStreetPanel;
47
import org.gvsig.geocoding.gui.dynamic.ThreeStreetPanel;
48
import org.gvsig.geocoding.gui.dynamic.TwoStreetPanel;
49
import org.gvsig.geocoding.gui.structure.GeocoStructurePanel;
50
import org.gvsig.geocoding.results.GeocoLocationSet;
51
import org.gvsig.geocoding.utils.GeocoUtils;
52
import org.gvsig.project.document.table.FeatureTableDocument;
53
import org.slf4j.Logger;
54

    
55
import com.iver.andami.PluginServices;
56
import com.iver.andami.ui.mdiManager.IWindow;
57
import com.iver.andami.ui.mdiManager.SingletonWindow;
58
import com.iver.andami.ui.mdiManager.WindowInfo;
59

    
60
public class GeocodingPanel extends javax.swing.JPanel implements
61
                SingletonWindow, MouseListener {
62

    
63
        private static final long serialVersionUID = 1L;
64
        private Logger log = PluginServices.getLogger();
65
        private GeocoController control = null;
66
        private OneStreetPanel oneA = null;
67
        private TwoStreetPanel twoA = null;
68
        private ThreeStreetPanel threeA = null;
69

    
70
        private static final String ROW = PluginServices.getText(null, "row")
71
                        + " : ";
72

    
73
        private ButtonGroup groupRadio;
74
        private javax.swing.JButton jButExit;
75
        private javax.swing.JButton jButLoad;
76
        private javax.swing.JButton jButNew;
77
        private javax.swing.JButton jButNext;
78
        private javax.swing.JButton jButPrevious;
79
        private javax.swing.JButton jButSearch;
80
        private javax.swing.JButton jButExport;
81
        private javax.swing.JComboBox jComboTable;
82
        private javax.swing.JComboBox jComboType;
83
        private javax.swing.JLabel jLabAccuracy;
84
        private javax.swing.JLabel jLabMaxResults;
85
        private javax.swing.JLabel jLabPatternPath;
86
        private javax.swing.JLabel jLabPercent1;
87
        private javax.swing.JLabel jLabPercent2;
88
        private javax.swing.JLabel jLabQuality;
89
        private javax.swing.JLabel jLabStructure;
90
        private javax.swing.JLabel jLabType;
91
        private javax.swing.JLabel jLabRow;
92
        private javax.swing.JPanel jPanButtons;
93
        private javax.swing.JPanel jPanDynamic;
94
        private javax.swing.JPanel jPanGeocodingType;
95
        private javax.swing.JPanel jPanPattern;
96
        private javax.swing.JPanel jPanResults;
97
        private javax.swing.JPanel jPanResultsButtons;
98
        private javax.swing.JPanel jPanSettings;
99
        private javax.swing.JPanel jPanSimpleTable;
100
        private javax.swing.JPanel jPanTable;
101
        private javax.swing.JPanel jPanType;
102
        private javax.swing.JRadioButton jRadioSimple;
103
        private javax.swing.JRadioButton jRadioTable;
104
        private javax.swing.JScrollPane jScrollResults;
105
        private javax.swing.JTable jTableResults;
106
        private javax.swing.JTextField jTextAccuracy;
107
        private javax.swing.JTextField jTextMaxResults;
108
        private javax.swing.JTextField jTextPatternPath;
109
        private javax.swing.JTextField jTextQuality;
110

    
111
        /**
112
         * Constructor
113
         * 
114
         * @param _control
115
         */
116
        public GeocodingPanel(GeocoController _control) {
117
                this.control = _control;
118
                this.initComponents();
119
                this.setMesages();
120
                this.setImages();
121

    
122
                /* Insert the address type dynamic panel (1 address) */
123
                oneA = new OneStreetPanel(control);
124
                twoA = new TwoStreetPanel(control);
125
                threeA = new ThreeStreetPanel(control);
126
                insertDynamicPanel(oneA);
127
                this.control.getGmodel().setPattern(null);
128

    
129
        }
130

    
131
        private void setImages() {
132
                String baseDir = PluginServices.getPluginServices(this)
133
                                .getClassLoader().getBaseDir();
134

    
135
                jButLoad
136
                                .setIcon(new ImageIcon(baseDir + File.separator + "images"
137
                                                + File.separator + "icons16" + File.separator
138
                                                + "file-open.png"));
139
                jButNew.setIcon(new ImageIcon(baseDir + File.separator + "images"
140
                                + File.separator + "icons16" + File.separator
141
                                + "document-new.png"));
142

    
143
                jButNext.setIcon(new ImageIcon(baseDir + File.separator + "images"
144
                                + File.separator + "icons16" + File.separator + "go-next.png"));
145

    
146
                jButPrevious.setIcon(new ImageIcon(baseDir + File.separator + "images"
147
                                + File.separator + "icons16" + File.separator
148
                                + "go-previous.png"));
149

    
150
                jButSearch.setIcon(new ImageIcon(baseDir + File.separator + "images"
151
                                + File.separator + "icons16" + File.separator
152
                                + "system-search.png"));
153

    
154
                jButExit.setIcon(new ImageIcon(baseDir + File.separator + "images"
155
                                + File.separator + "icons16" + File.separator
156
                                + "system-log-out.png"));
157

    
158
                jButExport.setIcon(new ImageIcon(baseDir + File.separator + "images"
159
                                + File.separator + "icons16" + File.separator + "go-up.png"));
160

    
161
        }
162

    
163
        private void setMesages() {
164
                PluginServices ps = PluginServices.getPluginServices(this);
165

    
166
                jPanPattern
167
                                .setBorder(GeocoUtils.getTitledBorder(ps.getText("pattern")));
168

    
169
                this.jButLoad.setToolTipText(ps.getText("butloadpattern"));
170

    
171
                this.jButNew.setToolTipText(ps.getText("butnewpattern"));
172

    
173
                this.jLabPatternPath.setText(ps.getText("patternpath"));
174

    
175
                jPanGeocodingType.setBorder(GeocoUtils.getTitledBorder(ps
176
                                .getText("gtype")));
177

    
178
                this.jRadioSimple.setText(ps.getText("gsimple"));
179
                this.jRadioSimple.setToolTipText(ps.getText("gsimpletip"));
180

    
181
                this.jRadioTable.setText(ps.getText("gtable"));
182
                this.jRadioTable.setToolTipText(ps.getText("gtabletip"));
183

    
184
                jPanType.setBorder(GeocoUtils.getTitledBorder(ps.getText("atype")));
185
                this.jLabType.setText(ps.getText("type"));
186

    
187
                jPanSettings.setBorder(GeocoUtils.getTitledBorder(ps
188
                                .getText("settings")));
189
                this.jLabAccuracy.setText(ps.getText("accuracy"));
190
                this.jLabMaxResults.setText(ps.getText("maxresults"));
191
                this.jLabQuality.setText(ps.getText("quality"));
192
                jTextMaxResults.setToolTipText(ps.getText("maxresultstip"));
193
                jTextAccuracy.setToolTipText(ps.getText("accuracytip"));
194
                jTextQuality.setToolTipText(ps.getText("qualitytip"));
195

    
196
                jPanResults
197
                                .setBorder(GeocoUtils.getTitledBorder(ps.getText("results")));
198

    
199
                this.jButPrevious.setToolTipText(ps.getText("previoustip"));
200
                this.jButNext.setToolTipText(ps.getText("nexttip"));
201

    
202
                this.jButExit.setText(ps.getText("exit"));
203
                this.jButSearch.setText(ps.getText("search"));
204
                this.jButExport.setText(ps.getText("export"));
205

    
206
        }
207

    
208
        /**
209
         * Components
210
         */
211
        private void initComponents() {
212

    
213
                this.setFocusable(true);
214
                this.addMouseListener(this);
215

    
216
                java.awt.GridBagConstraints gridBagConstraints;
217

    
218
                groupRadio = new javax.swing.ButtonGroup();
219
                jPanPattern = new javax.swing.JPanel();
220
                jLabPatternPath = new javax.swing.JLabel();
221
                jTextPatternPath = new javax.swing.JTextField();
222
                jButLoad = new javax.swing.JButton();
223
                jButNew = new javax.swing.JButton();
224
                jLabStructure = new javax.swing.JLabel();
225
                jPanGeocodingType = new javax.swing.JPanel();
226
                jPanSimpleTable = new javax.swing.JPanel();
227
                jRadioSimple = new javax.swing.JRadioButton();
228
                jPanTable = new javax.swing.JPanel();
229
                jComboTable = new javax.swing.JComboBox();
230
                jRadioTable = new javax.swing.JRadioButton();
231
                jPanType = new javax.swing.JPanel();
232
                jComboType = new javax.swing.JComboBox();
233
                jLabType = new javax.swing.JLabel();
234
                jLabRow = new javax.swing.JLabel();
235
                jPanDynamic = new javax.swing.JPanel();
236
                jPanSettings = new javax.swing.JPanel();
237
                jLabMaxResults = new javax.swing.JLabel();
238
                jTextMaxResults = new javax.swing.JTextField();
239
                jLabQuality = new javax.swing.JLabel();
240
                jTextQuality = new javax.swing.JTextField();
241
                jLabPercent1 = new javax.swing.JLabel();
242
                jLabAccuracy = new javax.swing.JLabel();
243
                jTextAccuracy = new javax.swing.JTextField();
244
                jLabPercent2 = new javax.swing.JLabel();
245
                jPanResults = new javax.swing.JPanel();
246
                jScrollResults = new javax.swing.JScrollPane();
247
                jTableResults = new javax.swing.JTable();
248
                jPanResultsButtons = new javax.swing.JPanel();
249
                jButNext = new javax.swing.JButton();
250
                jButPrevious = new javax.swing.JButton();
251
                jPanButtons = new javax.swing.JPanel();
252
                jButExit = new javax.swing.JButton();
253
                jButSearch = new javax.swing.JButton();
254
                jButExport = new javax.swing.JButton();
255

    
256
                setLayout(new java.awt.GridBagLayout());
257

    
258
                jPanPattern.setBorder(javax.swing.BorderFactory
259
                                .createTitledBorder("Pattern"));
260
                jPanPattern.setLayout(new java.awt.GridBagLayout());
261

    
262
                jLabPatternPath.setText("Name");
263
                gridBagConstraints = new java.awt.GridBagConstraints();
264
                gridBagConstraints.gridx = 0;
265
                gridBagConstraints.gridy = 0;
266
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 3);
267
                jPanPattern.add(jLabPatternPath, gridBagConstraints);
268

    
269
                jTextPatternPath.setEditable(false);
270
                jTextPatternPath.setToolTipText("Pattern file");
271

    
272
                gridBagConstraints = new java.awt.GridBagConstraints();
273
                gridBagConstraints.gridx = 1;
274
                gridBagConstraints.gridy = 0;
275
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
276
                gridBagConstraints.weightx = 1.0;
277
                jPanPattern.add(jTextPatternPath, gridBagConstraints);
278

    
279
                jButLoad.setText("");
280
                jButLoad.setToolTipText("Load pattern");
281
                jButLoad.setMaximumSize(new java.awt.Dimension(35, 25));
282
                jButLoad.setMinimumSize(new java.awt.Dimension(30, 25));
283
                jButLoad.setPreferredSize(new java.awt.Dimension(30, 25));
284
                jButLoad.addActionListener(new java.awt.event.ActionListener() {
285
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
286
                                evLoadPattern(evt);
287
                        }
288
                });
289
                gridBagConstraints = new java.awt.GridBagConstraints();
290
                gridBagConstraints.gridx = 2;
291
                gridBagConstraints.gridy = 0;
292
                gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 2);
293
                jPanPattern.add(jButLoad, gridBagConstraints);
294

    
295
                jButNew.setText("");
296
                jButNew.setToolTipText("New");
297
                jButNew.setMaximumSize(new java.awt.Dimension(35, 25));
298
                jButNew.setMinimumSize(new java.awt.Dimension(30, 25));
299
                jButNew.setPreferredSize(new java.awt.Dimension(30, 25));
300
                jButNew.addActionListener(new java.awt.event.ActionListener() {
301
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
302
                                evNewPattern(evt);
303
                        }
304
                });
305
                gridBagConstraints = new java.awt.GridBagConstraints();
306
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5);
307
                jPanPattern.add(jButNew, gridBagConstraints);
308

    
309
                jLabStructure.setFont(new java.awt.Font("Tahoma", 1, 11));
310
                jLabStructure.setText("|...|");
311
                jLabStructure
312
                                .setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
313
                gridBagConstraints = new java.awt.GridBagConstraints();
314
                gridBagConstraints.gridx = 0;
315
                gridBagConstraints.gridy = 2;
316
                gridBagConstraints.gridwidth = 4;
317
                gridBagConstraints.insets = new java.awt.Insets(5, 10, 2, 10);
318
                jPanPattern.add(jLabStructure, gridBagConstraints);
319

    
320
                gridBagConstraints = new java.awt.GridBagConstraints();
321
                gridBagConstraints.gridx = 0;
322
                gridBagConstraints.gridy = 0;
323
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
324
                gridBagConstraints.weightx = 1.0;
325
                gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
326
                add(jPanPattern, gridBagConstraints);
327

    
328
                jPanGeocodingType.setBorder(javax.swing.BorderFactory
329
                                .createTitledBorder("Geocoding type"));
330
                jPanGeocodingType.setLayout(new java.awt.GridBagLayout());
331
                jPanSimpleTable.setLayout(new java.awt.GridBagLayout());
332

    
333
                groupRadio.add(jRadioSimple);
334
                jRadioSimple.setSelected(true);
335
                jRadioSimple.setEnabled(false);
336
                jRadioSimple.setText("Simple geocoding");
337
                jRadioSimple.setToolTipText("Simple geocoding");
338
                jRadioSimple.addActionListener(new java.awt.event.ActionListener() {
339
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
340
                                evSimpleGeocoding(evt);
341
                        }
342
                });
343
                gridBagConstraints = new java.awt.GridBagConstraints();
344
                gridBagConstraints.gridx = 0;
345
                gridBagConstraints.gridy = 0;
346
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
347
                gridBagConstraints.weightx = 1.0;
348
                gridBagConstraints.insets = new java.awt.Insets(0, 50, 0, 10);
349
                jPanSimpleTable.add(jRadioSimple, gridBagConstraints);
350

    
351
                jPanTable.setLayout(new java.awt.GridBagLayout());
352

    
353
                jComboTable.setModel(new javax.swing.DefaultComboBoxModel(
354
                                new String[] { "" }));
355
                jComboTable.setMinimumSize(new java.awt.Dimension(150, 18));
356
                jComboTable.setPreferredSize(new java.awt.Dimension(200, 22));
357

    
358
                gridBagConstraints = new java.awt.GridBagConstraints();
359
                gridBagConstraints.gridx = 1;
360
                gridBagConstraints.gridy = 0;
361
                jComboTable.setEnabled(false);
362
                jPanTable.add(jComboTable, gridBagConstraints);
363

    
364
                groupRadio.add(jRadioTable);
365
                jRadioTable.setText("Table geocoding");
366
                jRadioTable.setEnabled(false);
367
                jRadioTable.setToolTipText("Table geocoding");
368
                jRadioTable.addActionListener(new java.awt.event.ActionListener() {
369
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
370
                                evTableGeocoding(evt);
371
                        }
372
                });
373
                gridBagConstraints = new java.awt.GridBagConstraints();
374
                gridBagConstraints.gridx = 0;
375
                gridBagConstraints.gridy = 0;
376
                gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 2);
377
                jPanTable.add(jRadioTable, gridBagConstraints);
378

    
379
                gridBagConstraints = new java.awt.GridBagConstraints();
380
                gridBagConstraints.gridx = 1;
381
                gridBagConstraints.gridy = 0;
382
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
383
                gridBagConstraints.weightx = 1.0;
384
                jPanSimpleTable.add(jPanTable, gridBagConstraints);
385

    
386
                gridBagConstraints = new java.awt.GridBagConstraints();
387
                gridBagConstraints.gridx = 0;
388
                gridBagConstraints.gridy = 0;
389
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
390
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
391
                jPanGeocodingType.add(jPanSimpleTable, gridBagConstraints);
392

    
393
                jPanType.setBorder(javax.swing.BorderFactory
394
                                .createTitledBorder("Search Type"));
395
                jPanType.setLayout(new java.awt.GridBagLayout());
396

    
397
                String[] atypes = { PluginServices.getText(null, "typeA"),
398
                                PluginServices.getText(null, "typeB"),
399
                                PluginServices.getText(null, "typeC") };
400
                jComboType.setEnabled(false);
401
                jComboType.setModel(new javax.swing.DefaultComboBoxModel(atypes));
402
                gridBagConstraints = new java.awt.GridBagConstraints();
403
                gridBagConstraints.gridx = 1;
404
                gridBagConstraints.gridy = 0;
405
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
406
                gridBagConstraints.weightx = 1.0;
407
                gridBagConstraints.insets = new java.awt.Insets(0, 10, 0, 40);
408
                jComboType.addActionListener(new java.awt.event.ActionListener() {
409
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
410
                                evComboSelectType(evt);
411
                        }
412
                });
413
                jPanType.add(jComboType, gridBagConstraints);
414

    
415
                jLabType.setText("Type");
416
                jLabType.setEnabled(false);
417
                gridBagConstraints = new java.awt.GridBagConstraints();
418
                gridBagConstraints.gridx = 0;
419
                gridBagConstraints.gridy = 0;
420
                gridBagConstraints.insets = new java.awt.Insets(0, 40, 0, 0);
421
                jPanType.add(jLabType, gridBagConstraints);
422

    
423
                jPanDynamic.setLayout(new java.awt.GridBagLayout());
424
                gridBagConstraints = new java.awt.GridBagConstraints();
425
                gridBagConstraints.gridx = 0;
426
                gridBagConstraints.gridy = 1;
427
                gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0);
428
                gridBagConstraints.gridwidth = 2;
429
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
430
                gridBagConstraints.weightx = 1.0;
431
                jPanType.add(jPanDynamic, gridBagConstraints);
432

    
433
                gridBagConstraints = new java.awt.GridBagConstraints();
434
                gridBagConstraints.gridx = 0;
435
                gridBagConstraints.gridy = 1;
436
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
437
                gridBagConstraints.weightx = 1.0;
438
                gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
439
                jPanGeocodingType.add(jPanType, gridBagConstraints);
440

    
441
                gridBagConstraints = new java.awt.GridBagConstraints();
442
                gridBagConstraints.gridx = 0;
443
                gridBagConstraints.gridy = 1;
444
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
445

    
446
                gridBagConstraints.insets = new java.awt.Insets(1, 2, 1, 2);
447
                add(jPanGeocodingType, gridBagConstraints);
448

    
449
                jPanSettings.setBorder(javax.swing.BorderFactory
450
                                .createTitledBorder("Settings"));
451
                jPanSettings.setLayout(new java.awt.GridBagLayout());
452

    
453
                jLabMaxResults.setText("Max Results");
454
                jLabMaxResults.setEnabled(false);
455
                jLabMaxResults
456
                                .setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
457
                gridBagConstraints = new java.awt.GridBagConstraints();
458
                gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3);
459
                jPanSettings.add(jLabMaxResults, gridBagConstraints);
460

    
461
                jTextMaxResults.setMinimumSize(new java.awt.Dimension(40, 19));
462
                jTextMaxResults.setEnabled(false);
463
                jTextMaxResults.setPreferredSize(new java.awt.Dimension(40, 19));
464
                jTextMaxResults.addFocusListener(new java.awt.event.FocusAdapter() {
465
                        public void focusLost(java.awt.event.FocusEvent evt) {
466
                                evChangeMaxresults(evt);
467
                        }
468
                });
469
                jPanSettings.add(jTextMaxResults, new java.awt.GridBagConstraints());
470

    
471
                jLabQuality.setText("Quality");
472
                jLabQuality.setEnabled(false);
473
                gridBagConstraints = new java.awt.GridBagConstraints();
474
                gridBagConstraints.insets = new java.awt.Insets(0, 30, 0, 3);
475
                jPanSettings.add(jLabQuality, gridBagConstraints);
476

    
477
                jTextQuality.setEnabled(false);
478
                jTextQuality.setMinimumSize(new java.awt.Dimension(40, 19));
479
                jTextQuality.setPreferredSize(new java.awt.Dimension(40, 19));
480
                jTextQuality.addFocusListener(new java.awt.event.FocusAdapter() {
481
                        public void focusLost(java.awt.event.FocusEvent evt) {
482
                                evChangeQuality(evt);
483
                        }
484
                });
485
                jPanSettings.add(jTextQuality, new java.awt.GridBagConstraints());
486

    
487
                jLabPercent1.setText("%");
488
                jLabPercent1.setEnabled(false);
489
                gridBagConstraints = new java.awt.GridBagConstraints();
490
                gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 0);
491
                jPanSettings.add(jLabPercent1, gridBagConstraints);
492

    
493
                jLabAccuracy.setText("Accuracy");
494
                jLabAccuracy.setEnabled(false);
495
                ;
496
                gridBagConstraints = new java.awt.GridBagConstraints();
497
                gridBagConstraints.insets = new java.awt.Insets(0, 30, 0, 3);
498
                jPanSettings.add(jLabAccuracy, gridBagConstraints);
499

    
500
                jTextAccuracy.setEnabled(false);
501
                jTextAccuracy.setMinimumSize(new java.awt.Dimension(40, 19));
502
                jTextAccuracy.setPreferredSize(new java.awt.Dimension(40, 19));
503
                jTextAccuracy.addFocusListener(new java.awt.event.FocusAdapter() {
504
                        public void focusLost(java.awt.event.FocusEvent evt) {
505
                                evChangeAccuracy(evt);
506
                        }
507
                });
508
                jPanSettings.add(jTextAccuracy, new java.awt.GridBagConstraints());
509

    
510
                jLabPercent2.setText("%");
511
                jLabPercent2.setEnabled(false);
512
                gridBagConstraints = new java.awt.GridBagConstraints();
513
                gridBagConstraints.insets = new java.awt.Insets(0, 2, 0, 0);
514
                jPanSettings.add(jLabPercent2, gridBagConstraints);
515

    
516
                gridBagConstraints = new java.awt.GridBagConstraints();
517
                gridBagConstraints.gridx = 0;
518
                gridBagConstraints.gridy = 2;
519
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
520
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
521
                gridBagConstraints.insets = new java.awt.Insets(1, 2, 1, 2);
522
                add(jPanSettings, gridBagConstraints);
523

    
524
                jPanResults.setBorder(javax.swing.BorderFactory
525
                                .createTitledBorder("Results"));
526
                jPanResults.setLayout(new java.awt.GridBagLayout());
527
                jTableResults.setEnabled(false);
528
                jTableResults.setModel(new TableResultsModel());
529
                TableColumn col0 = jTableResults.getColumnModel().getColumn(0);
530
                col0.setPreferredWidth(50);
531
                TableColumn col1 = jTableResults.getColumnModel().getColumn(1);
532
                col1.setPreferredWidth(50);
533
                TableColumn col2 = jTableResults.getColumnModel().getColumn(2);
534
                col2.setPreferredWidth(50);
535
                jScrollResults.setViewportView(jTableResults);
536

    
537
                JTableHeader header = jTableResults.getTableHeader();
538

    
539
                header.addMouseListener(new MouseAdapter() {
540
                        public void mouseClicked(MouseEvent e) {
541
                                JTableHeader h = (JTableHeader) e.getSource();
542
                                int nColumn = h.columnAtPoint(e.getPoint());
543

    
544
                                if (nColumn == 1 || nColumn == 2) {
545
                                        ((TableResultsModel) jTableResults.getModel())
546
                                                        .sort(nColumn);
547
                                        jTableResults.validate();
548
                                }
549
                        }
550
                });
551

    
552
                gridBagConstraints = new java.awt.GridBagConstraints();
553
                gridBagConstraints.gridx = 0;
554
                gridBagConstraints.gridy = 0;
555
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
556
                gridBagConstraints.weightx = 1.0;
557
                gridBagConstraints.weighty = 1.0;
558
                jPanResults.add(jScrollResults, gridBagConstraints);
559

    
560
                jPanResultsButtons.setLayout(new java.awt.GridBagLayout());
561

    
562
                jButNext.setText("");
563
                jButNext.setToolTipText("Next register");
564
                jButNext.setEnabled(false);
565
                jButNext.setPreferredSize(new Dimension(35, 25));
566
                jButNext.setMaximumSize(new Dimension(35, 25));
567
                jButNext.addActionListener(new java.awt.event.ActionListener() {
568
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
569
                                evNextButton(evt);
570
                        }
571
                });
572
                gridBagConstraints = new java.awt.GridBagConstraints();
573
                gridBagConstraints.gridx = 2;
574
                gridBagConstraints.gridy = 0;
575
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
576
                jPanResultsButtons.add(jButNext, gridBagConstraints);
577

    
578
                jLabRow.setText("");
579
                jLabRow.setEnabled(false);
580
                jLabRow.setHorizontalAlignment(SwingConstants.CENTER);
581
                gridBagConstraints = new java.awt.GridBagConstraints();
582
                gridBagConstraints.gridx = 1;
583
                gridBagConstraints.gridy = 0;
584
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
585
                gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER;
586
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
587
                gridBagConstraints.weightx = 1.0;
588
                jPanResultsButtons.add(jLabRow, gridBagConstraints);
589

    
590
                jButPrevious.setText("");
591
                jButPrevious.setToolTipText("Previous register");
592
                jButPrevious.setEnabled(false);
593
                jButPrevious.setMaximumSize(new Dimension(35, 25));
594
                jButPrevious.setPreferredSize(new Dimension(35, 25));
595
                jButPrevious.addKeyListener(new java.awt.event.KeyAdapter() {
596
                        public void keyReleased(java.awt.event.KeyEvent evt) {
597
                                evPreviousButton(evt);
598
                        }
599
                });
600
                gridBagConstraints = new java.awt.GridBagConstraints();
601
                gridBagConstraints.gridx = 0;
602
                gridBagConstraints.gridy = 0;
603
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
604
                jPanResultsButtons.add(jButPrevious, gridBagConstraints);
605

    
606
                gridBagConstraints = new java.awt.GridBagConstraints();
607
                gridBagConstraints.gridx = 0;
608
                gridBagConstraints.gridy = 1;
609
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
610
                gridBagConstraints.weightx = 1.0;
611
                gridBagConstraints.insets = new java.awt.Insets(1, 0, 0, 0);
612
                jPanResults.add(jPanResultsButtons, gridBagConstraints);
613

    
614
                gridBagConstraints = new java.awt.GridBagConstraints();
615
                gridBagConstraints.gridx = 0;
616
                gridBagConstraints.gridy = 3;
617
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
618
                gridBagConstraints.weightx = 1.0;
619
                gridBagConstraints.weighty = 1.0;
620
                gridBagConstraints.insets = new java.awt.Insets(1, 2, 1, 2);
621
                add(jPanResults, gridBagConstraints);
622

    
623
                jPanButtons.setLayout(new java.awt.GridBagLayout());
624

    
625
                jButExit.setText("Exit");
626
                jButExit.setToolTipText("Exit");
627
                jButExit.addActionListener(new java.awt.event.ActionListener() {
628
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
629
                                evExit(evt);
630
                        }
631
                });
632
                gridBagConstraints = new java.awt.GridBagConstraints();
633
                gridBagConstraints.gridx = 2;
634
                gridBagConstraints.gridy = 0;
635
                gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0);
636
                jPanButtons.add(jButExit, gridBagConstraints);
637

    
638
                jButSearch.setText("Search");
639
                jButSearch.setToolTipText("Search");
640
                jButSearch.setEnabled(false);
641
                jButSearch.addActionListener(new java.awt.event.ActionListener() {
642
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
643
                                evSearch(evt);
644
                        }
645
                });
646
                gridBagConstraints = new java.awt.GridBagConstraints();
647
                gridBagConstraints.gridx = 0;
648
                gridBagConstraints.gridy = 0;
649
                jPanButtons.add(jButSearch, gridBagConstraints);
650

    
651
                jButExport.setText("Export");
652
                jButExport.setToolTipText("Export");
653
                jButExport.setEnabled(false);
654
                jButExport.addActionListener(new java.awt.event.ActionListener() {
655
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
656
                                evExport(evt);
657
                        }
658
                });
659
                jPanButtons.add(jButExport, new java.awt.GridBagConstraints());
660

    
661
                gridBagConstraints = new java.awt.GridBagConstraints();
662
                gridBagConstraints.gridx = 0;
663
                gridBagConstraints.gridy = 4;
664
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
665
                gridBagConstraints.weightx = 1.0;
666
                gridBagConstraints.insets = new java.awt.Insets(2, 2, 4, 2);
667
                add(jPanButtons, gridBagConstraints);
668
        }
669

    
670
        /**
671
         * 
672
         * @param evt
673
         */
674
        private void evLoadPattern(java.awt.event.ActionEvent evt) {
675
                /* load the pattern */
676
                boolean apto = control.loadPatternXML();
677
                String strpat = "";
678

    
679
                if (apto) {
680
                        /* Pattern structure */
681
                        strpat = control.showPatternStructure();
682
                        jLabStructure.setText(strpat);
683

    
684
                        /* update the url of the pattern in the panel */
685
                        if (control.getGmodel().getPatternFile() != null) {
686
                                jTextPatternPath.setText(control.getGmodel().getPatternFile()
687
                                                .getAbsolutePath());
688
                        }
689
                        /* update the parameters */
690
                        jTextMaxResults.setText(Integer.toString(control.getPattern()
691
                                        .getSettings().getResults()));
692
                        jTextAccuracy.setText(Integer.toString(control.getPattern()
693
                                        .getSettings().getAccuracy()));
694
                        jTextQuality.setText(Integer.toString(control.getPattern()
695
                                        .getSettings().getQuality()));
696

    
697
                        // enable components
698
                        if (control.getPattern() != null) {
699
                                this.enableComponents();
700
                                this.getOneA().enableComponents(true);
701
                        }
702
                }
703
        }
704

    
705
        /**
706
         * 
707
         * @param evt
708
         */
709
        private void evNewPattern(java.awt.event.ActionEvent evt) {
710
                control.launchNewPatternPanel();
711
        }
712

    
713
        /**
714
         * 
715
         * @param evt
716
         */
717
        private void evSimpleGeocoding(java.awt.event.ActionEvent evt) {
718
                control.getGmodel().setSimple(true);
719
                activeTableFunctionaties(false);
720
                jButExport.setEnabled(false);
721
        }
722

    
723
        /**
724
         * 
725
         * @param evt
726
         */
727
        private void evTableGeocoding(java.awt.event.ActionEvent evt) {
728
                /* Put the tables names availables in the combo */
729
                DefaultComboBoxModel comboModel = control.getModelgvSIGTables();
730
                if (comboModel == null) {
731
                        comboModel = new DefaultComboBoxModel();
732
                }
733
                /* save in the model table geocoding */
734
                jComboTable.setModel(comboModel);
735
                /* enable components */
736
                control.getGmodel().setSimple(false);
737
                jComboTable.setEnabled(true);
738
                jButExport.setEnabled(false);
739

    
740
        }
741

    
742
        /**
743
         * 
744
         * @param evt
745
         */
746
        private void evComboSelectType(java.awt.event.ActionEvent evt) {
747
                int type = jComboType.getSelectedIndex();
748
                switch (type) {
749
                case 0:
750
                        insertDynamicPanel(oneA);
751
                        break;
752
                case 1:
753
                        insertDynamicPanel(twoA);
754
                        break;
755
                case 2:
756
                        insertDynamicPanel(threeA);
757
                        break;
758
                }
759
        }
760

    
761
        /**
762
         * 
763
         * @param evt
764
         */
765
        private void evChangeMaxresults(java.awt.event.FocusEvent evt) {
766
                String max = jTextMaxResults.getText().trim();
767
                int maxresults;
768
                try {
769
                        maxresults = Integer.parseInt(max);
770
                        if (maxresults < 1) {
771
                                maxresults = 1;
772
                                jTextMaxResults.setText(Integer.toString(maxresults));
773
                        }
774
                } catch (Exception e) {
775
                        maxresults = control.getPattern().getSettings().getResults();
776
                        jTextMaxResults.setText(Integer.toString(maxresults));
777
                }
778
        }
779

    
780
        /**
781
         * 
782
         * @param evt
783
         */
784
        private void evChangeQuality(java.awt.event.FocusEvent evt) {
785
                String qual = jTextQuality.getText().trim();
786
                int quality;
787
                try {
788
                        quality = Integer.parseInt(qual);
789
                        if (quality < 0) {
790
                                quality = 0;
791
                                jTextQuality.setText(Integer.toString(quality));
792
                        }
793
                        if (quality > 100) {
794
                                quality = 100;
795
                                jTextQuality.setText(Integer.toString(quality));
796
                        }
797
                } catch (Exception e) {
798
                        quality = control.getPattern().getSettings().getQuality();
799
                        jTextQuality.setText(Integer.toString(quality));
800
                }
801
        }
802

    
803
        /**
804
         * 
805
         * @param evt
806
         */
807
        private void evChangeAccuracy(java.awt.event.FocusEvent evt) {
808
                String accura = jTextAccuracy.getText().trim();
809
                int accuracy;
810
                try {
811
                        accuracy = Integer.parseInt(accura);
812
                        if (accuracy < 0) {
813
                                accuracy = 1;
814
                                jTextAccuracy.setText(Integer.toString(accuracy));
815
                        }
816
                        if (accuracy > 100) {
817
                                accuracy = 100;
818
                                jTextAccuracy.setText(Integer.toString(accuracy));
819
                        }
820
                } catch (Exception e) {
821
                        accuracy = control.getPattern().getSettings().getAccuracy();
822
                        jTextAccuracy.setText(Integer.toString(accuracy));
823
                }
824
        }
825

    
826
        /**
827
         * 
828
         * @param evt
829
         */
830
        private void evNextButton(java.awt.event.ActionEvent evt) {
831

    
832
        }
833

    
834
        /**
835
         * 
836
         * @param evt
837
         */
838
        private void evPreviousButton(java.awt.event.KeyEvent evt) {
839

    
840
        }
841

    
842
        /**
843
         * 
844
         * @param evt
845
         */
846
        private void evSearch(java.awt.event.ActionEvent evt) {
847

    
848
                // GEOCODING PROCESS
849
                control.geocoding();
850
                // GEOCODING PROCESS
851

    
852
                List<GeocoLocationSet> proof = control.getGmodel().getResults();
853

    
854
                if (proof != null && proof.size() > 0) {
855

    
856
                        GeocoLocationSet loc = proof.get(0);
857
                        int max = Integer.parseInt(this.jTextMaxResults.getText());
858
                        TableResultsModel model = (TableResultsModel) jTableResults
859
                                        .getModel();
860
                        model.setGeocoLocationSet(loc, max);
861
                        jTableResults.setModel(model);
862
                        jTableResults.validate();
863
                        jTableResults.repaint();
864
                }
865

    
866
                /* active table results functionalities */
867
                activeTableFunctionaties(true);
868
                jButExport.setEnabled(true);
869
        }
870

    
871
        /**
872
         * 
873
         * @param evt
874
         */
875
        private void evExport(java.awt.event.ActionEvent evt) {
876

    
877
        }
878

    
879
        /**
880
         * 
881
         * @param evt
882
         */
883
        private void evExit(java.awt.event.ActionEvent evt) {
884
                this.control.getGmodel().setPattern(null);
885
                IWindow[] iws = PluginServices.getMDIManager().getAllWindows();
886
                for (int i = 0; i < iws.length; i++) {
887
                        if (iws[i] instanceof GeocodingPanel) {
888
                                PluginServices.getMDIManager().closeWindow(iws[i]);
889
                        }
890
                }
891
        }
892

    
893
        /**
894
         * 
895
         */
896
        public WindowInfo getWindowInfo() {
897
                // WindowInfo info = new WindowInfo(WindowInfo.MODALDIALOG
898
                // | WindowInfo.RESIZABLE);
899
                WindowInfo info = new WindowInfo(WindowInfo.RESIZABLE);
900

    
901
                info.setMinimumSize(this.getMinimumSize());
902
                info.setWidth(540);
903
                info.setHeight(500);
904
                info.setTitle(PluginServices.getText(this, "geocoding"));
905

    
906
                return info;
907
        }
908

    
909
        /**
910
         * 
911
         */
912
        public Object getWindowProfile() {
913

    
914
                return null;
915
        }
916

    
917
        /**
918
         * insert changeable panel
919
         * 
920
         * @param pan
921
         */
922
        private void insertDynamicPanel(JPanel pan) {
923

    
924
                jPanDynamic.removeAll();
925

    
926
                GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
927
                gridBagConstraints.gridx = 0;
928
                gridBagConstraints.gridy = 0;
929
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
930
                gridBagConstraints.weightx = 1.0;
931
                gridBagConstraints.weighty = 1.0;
932

    
933
                jPanDynamic.add(pan, gridBagConstraints);
934

    
935
                this.setSize(this.getWidth() + 1, this.getHeight());
936
                jPanDynamic.validate();
937
                jPanResults.validate();
938
                jPanPattern.validate();
939
                pan.validate();
940
                this.validate();
941
                int x = this.getX();
942
                int y = this.getY();
943
                int wi = this.getWidth();
944
                int hi = this.getHeight();
945
                this.repaint(x, y, wi, hi);
946
        }
947

    
948
        /**
949
         * 
950
         * @param name1
951
         * @param typeAdr
952
         */
953
        public void setAddress1(String name1, int typeAdr) {
954
                if (typeAdr == control.getGmodel().ONE) {
955
                        oneA.setStreet1(name1);
956
                }
957
                if (typeAdr == control.getGmodel().CROSS) {
958
                        twoA.setStreet1(name1);
959
                }
960
                if (typeAdr == control.getGmodel().THREE) {
961
                        threeA.setStreet1(name1);
962
                }
963
        }
964

    
965
        /**
966
         * 
967
         * @param name2
968
         * @param typeAdr
969
         */
970
        public void setAddress2(String name2, int typeAdr) {
971
                if (typeAdr == control.getGmodel().CROSS) {
972
                        twoA.setStreet2(name2);
973
                }
974
                if (typeAdr == control.getGmodel().THREE) {
975
                        threeA.setStreet2(name2);
976
                }
977
        }
978

    
979
        /**
980
         * 
981
         * @param name3
982
         * @param typeAdr
983
         */
984
        public void setAddress3(String name3, int typeAdr) {
985
                if (typeAdr == control.getGmodel().THREE) {
986
                        threeA.setStreet3(name3);
987
                }
988
        }
989

    
990
        /**
991
         * show dynamic form
992
         * 
993
         * @param position
994
         *            (STREET1,STREET2,STREET3)
995
         * @param type
996
         *            (ONE,CROSS,THREE)
997
         */
998
        public void showDynamicForm(int position, int type) {
999
                GeocoStructurePanel dyn = new GeocoStructurePanel(control, position,
1000
                                type);
1001
                PluginServices.getMDIManager().addWindow(dyn);
1002
                dyn.setVisible(true);
1003
        }
1004

    
1005
        /**
1006
         * 
1007
         * @param showPatternStructure
1008
         */
1009
        public void setStructurePattern(String showPatternStructure) {
1010
                jLabStructure.setText(showPatternStructure);
1011

    
1012
        }
1013

    
1014
        /**
1015
         * 
1016
         * @param results
1017
         */
1018
        public void setParamMaxresults(int results) {
1019
                jTextMaxResults.setText((new Integer(results)).toString());
1020

    
1021
        }
1022

    
1023
        /**
1024
         * 
1025
         * @param accuracy
1026
         */
1027
        public void setParamAccuracy(int accuracy) {
1028
                jTextAccuracy.setText((new Integer(accuracy)).toString());
1029

    
1030
        }
1031

    
1032
        /**
1033
         * 
1034
         * @param quality
1035
         */
1036
        public void setParamQuality(int quality) {
1037
                jTextQuality.setText((new Integer(quality)).toString());
1038

    
1039
        }
1040

    
1041
        /**
1042
         * 
1043
         * @return
1044
         */
1045
        public String getJTextPatternPath() {
1046
                return jTextPatternPath.getText();
1047
        }
1048

    
1049
        /**
1050
         * 
1051
         * @param path
1052
         */
1053
        public void setJTextPatternPath(String path) {
1054
                this.jTextPatternPath.setText(path);
1055
        }
1056

    
1057
        /**
1058
         * @return the oneA
1059
         */
1060
        public OneStreetPanel getOneA() {
1061
                return oneA;
1062
        }
1063

    
1064
        /**
1065
         * @return the twoA
1066
         */
1067
        public TwoStreetPanel getTwoA() {
1068
                return twoA;
1069
        }
1070

    
1071
        /**
1072
         * @return the threeA
1073
         */
1074
        public ThreeStreetPanel getThreeA() {
1075
                return threeA;
1076
        }
1077

    
1078
        /**
1079
         * enable components when load a pattern
1080
         */
1081
        public void enableComponents() {
1082
                jRadioSimple.setEnabled(true);
1083
                if (control.getListgvSIGTables().size() > 0) {
1084
                        jRadioTable.setEnabled(true);
1085
                }
1086
                jLabType.setEnabled(true);
1087
                jComboType.setEnabled(true);
1088
                jLabMaxResults.setEnabled(true);
1089
                jTextMaxResults.setEnabled(true);
1090
                jLabQuality.setEnabled(true);
1091
                jTextQuality.setEnabled(true);
1092
                jLabAccuracy.setEnabled(true);
1093
                jTextAccuracy.setEnabled(true);
1094
                jLabPercent1.setEnabled(true);
1095
                jLabPercent2.setEnabled(true);
1096
                jTableResults.setEnabled(true);
1097

    
1098
                jButSearch.setEnabled(true);
1099
        }
1100

    
1101
        /**
1102
         * 
1103
         * @param active
1104
         */
1105
        private void activeTableFunctionaties(boolean active) {
1106
                jComboTable.setEnabled(active);
1107

    
1108
                if (!jRadioSimple.isSelected() && active) {
1109
                        jButNext.setEnabled(active);
1110
                        jButPrevious.setEnabled(active);
1111
                        jLabRow.setEnabled(active);
1112
                        jLabRow.setText(ROW + "1");
1113
                } else {
1114
                        jLabRow.setText("");
1115
                        jButNext.setEnabled(false);
1116
                        jButPrevious.setEnabled(false);
1117
                }
1118
        }
1119

    
1120
        /**
1121
         * 
1122
         * @param row
1123
         */
1124
        private void updateRow(int row) {
1125
                jLabRow.setText(ROW + row);
1126
        }
1127

    
1128
        /**
1129
 * 
1130
 */
1131
        public void mouseClicked(MouseEvent e) {
1132
        }
1133

    
1134
        /**
1135
 * 
1136
 */
1137
        public void mouseEntered(MouseEvent e) {
1138
                if (control.getPattern() != null) {
1139
                        List<FeatureTableDocument> tables = control.getListgvSIGTables();
1140
                        if (tables.size() > 0) {
1141
                                if (control.getPattern() != null) {
1142
                                        jRadioTable.setEnabled(true);
1143
                                }
1144
                        } else {
1145
                                jRadioTable.setEnabled(false);
1146
                        }
1147
                }
1148
        }
1149

    
1150
        /**
1151
 * 
1152
 */
1153
        public void mouseExited(MouseEvent e) {
1154

    
1155
        }
1156

    
1157
        /**
1158
 * 
1159
 */
1160
        public void mousePressed(MouseEvent e) {
1161

    
1162
        }
1163

    
1164
        /**
1165
         * 
1166
         */
1167
        public void mouseReleased(MouseEvent e) {
1168

    
1169
        }
1170

    
1171
        /**
1172
         * 
1173
         * @return
1174
         */
1175
        public FeatureTableDocument getSelectedTable() {
1176

    
1177
                return (FeatureTableDocument) jComboTable.getModel().getSelectedItem();
1178
        }
1179

    
1180
        /**
1181
         * 
1182
         */
1183
        public Object getWindowModel() {
1184
                return this.getClass().getCanonicalName();
1185
        }
1186

    
1187
}