Statistics
| Revision:

svn-gvsig-desktop / branches / v10 / extensions / extNormalization / src / org / gvsig / normalization / gui / NormalizationPanel.java @ 28183

History | View | Annotate | Download (67.1 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. main development
26
 */
27

    
28
package org.gvsig.normalization.gui;
29

    
30
import java.awt.Component;
31
import java.awt.event.KeyEvent;
32
import java.awt.event.KeyListener;
33
import java.awt.event.MouseEvent;
34
import java.awt.event.MouseListener;
35
import java.io.File;
36

    
37
import javax.swing.BorderFactory;
38
import javax.swing.ButtonGroup;
39
import javax.swing.DefaultComboBoxModel;
40
import javax.swing.DefaultListModel;
41
import javax.swing.ImageIcon;
42
import javax.swing.InputVerifier;
43
import javax.swing.JButton;
44
import javax.swing.JCheckBox;
45
import javax.swing.JComboBox;
46
import javax.swing.JComponent;
47
import javax.swing.JLabel;
48
import javax.swing.JList;
49
import javax.swing.JPanel;
50
import javax.swing.JRadioButton;
51
import javax.swing.JScrollPane;
52
import javax.swing.JTable;
53
import javax.swing.JTextArea;
54
import javax.swing.JTextField;
55
import javax.swing.event.ChangeEvent;
56
import javax.swing.event.ChangeListener;
57
import javax.swing.table.DefaultTableModel;
58

    
59
import org.apache.log4j.Logger;
60
import org.gvsig.normalization.patterns.Datevalue;
61
import org.gvsig.normalization.patterns.Decimalvalue;
62
import org.gvsig.normalization.patterns.Element;
63
import org.gvsig.normalization.patterns.Fieldseparator;
64
import org.gvsig.normalization.patterns.Fieldtype;
65
import org.gvsig.normalization.patterns.Infieldseparators;
66
import org.gvsig.normalization.patterns.Integervalue;
67
import org.gvsig.normalization.patterns.Patternnormalization;
68
import org.gvsig.normalization.patterns.Stringvalue;
69

    
70
import com.iver.andami.PluginServices;
71
import com.iver.andami.ui.mdiManager.IWindow;
72
import com.iver.andami.ui.mdiManager.WindowInfo;
73

    
74
/**
75
 * Normalization main panel
76
 * 
77
 * @author <a href="mailto:jsanz@prodevelop.es"> Jorge Gaspar Sanz Salinas</a>
78
 * @author <a href="mailto:vsanjaime@prodevelop.es"> Vicente Sanjaime Calvet</a>
79
 */
80
public class NormalizationPanel extends javax.swing.JPanel implements IWindow,
81
                ChangeListener {
82

    
83
        private static final long serialVersionUID = -2882235643001676017L;
84

    
85
        public static final int SAMPLES = 3;
86
        private static final Logger log = PluginServices.getLogger();
87
        private INormPanelModel model;
88
        private boolean isFile;
89
        private boolean isEdit;
90
        private PluginServices ps;
91
        private boolean dirty = false;
92
        private int selectedField = 0;
93

    
94
        /* GUI */
95
        private ButtonGroup butGroupDelimiter;
96
        private ButtonGroup butGroupFieldType;
97
        private ButtonGroup butGroupOutput;
98
        private JButton jButCancel;
99
        private JButton jButAddField;
100
        private JButton jButDownField;
101
        private JButton jButRemoveField;
102
        private JButton jButUpField;
103
        private JButton jButLoad;
104
        private JButton jButRun;
105
        private JButton jButSave;
106
        private JButton jButTest;
107
        private JCheckBox jCheckFirstRow;
108
        private JCheckBox jChkColon;
109
        private JCheckBox jChkDontImport;
110
        private JCheckBox jChkJoin;
111
        private JCheckBox jChkOther;
112
        private JCheckBox jChkSemicolon;
113
        private JCheckBox jChkSpace;
114
        private JCheckBox jChkTab;
115
        private JComboBox jComboDate;
116
        private JLabel jLabDecimal;
117
        private JLabel jLabFieldName;
118
        private JLabel jLabTextDel;
119
        private JLabel jLabThousand;
120
        private JLabel jLabelSelFields;
121
        private JList jListFieldList;
122
        private JList jListOriginalFields;
123
        private JPanel jPanApply;
124
        private JPanel jPanConsole;
125
        private JPanel jPanFieldList;
126
        private JPanel jPanFieldName;
127
        private JPanel jPanFieldSeparators;
128
        private JPanel jPanFieldSettings;
129
        private JPanel jPanFieldType;
130
        private JPanel jPanFields;
131
        private JPanel jPanFinalButtons;
132
        private JPanel jPanFirstRow;
133
        private JPanel jPanInField;
134
        private JPanel jPanOutput;
135
        private JPanel jPanOutputOpt;
136
        private JPanel jPanSampleOutput;
137
        private JPanel jPanSeparators;
138
        private JPanel jPanSource;
139
        private JPanel jPanel1;
140
        private JRadioButton jRadioAlterTable;
141
        private JRadioButton jRadioCharacter;
142
        private JRadioButton jRadioDate;
143
        private JRadioButton jRadioDecimal;
144
        private JRadioButton jRadioFixed;
145
        private JRadioButton jRadioInteger;
146
        private JRadioButton jRadioNewTable;
147
        private JRadioButton jRadioString;
148
        private JScrollPane jScrollPane2;
149
        private JScrollPane jScrollPaneConsole;
150
        private JScrollPane jScrollPaneFieldList;
151
        private JScrollPane jScrollPaneOriginalFields;
152
        private JScrollPane jScrollPaneSource;
153
        private JTable jTableResult;
154
        private JTable jTableSource;
155
        private JTextArea jTextAreaConsole;
156
        private JTextField jTextDecimal;
157
        private JTextField jTextNumberRows;
158
        private JLabel jLabelNumberRows;
159
        private JTextField jTextFieldName;
160
        private JTextField jTextFieldWidth;
161
        private JTextField jTextOther;
162
        private JTextField jTextTextDelimiter;
163
        private JTextField jTextThousand;
164

    
165
        /**
166
         * Creates new form NormalizationPanel to normalize table
167
         * 
168
         * @param _model
169
         * @return panel
170
         */
171
        public NormalizationPanel(INormPanelModel _model) {
172
                this.model = _model;
173
                init();
174
        }
175

    
176
        /**
177
         * Creates new form NormalizationPanel to normalize
178
         * 
179
         * @param _npm
180
         * @param _isFile
181
         * @param _isEdit
182
         * @return panel
183
         */
184
        public NormalizationPanel(INormPanelModel _model, boolean _isFile,
185
                        boolean _isEdit) {
186
                this.model = _model;
187
                this.isFile = _isFile;
188
                this.isEdit = _isEdit;
189
                init();
190
        }
191

    
192
        /**
193
         * This method sets the PluginServices and update the string and icons
194
         * 
195
         * @param ps
196
         *            PluginServices
197
         */
198
        public void setPs(PluginServices ps) {
199
                this.ps = ps;
200
                if (ps != null) {
201
                        setMessages();
202
                        setImages();
203
                }
204
        }
205

    
206
        /**
207
         * This method inserts the sample split strings into the Sample Table
208
         * 
209
         * @param chains
210
         *            array with strings
211
         */
212
        public void insertChainsInRowsTableSample(String[] chains) {
213

    
214
                DefaultTableModel dtm = new DefaultTableModel();
215
                int nfil = dtm.getRowCount();
216
                for (int i = 0; i < nfil; i++) {
217
                        dtm.setValueAt(chains[0], i, 0);
218
                }
219
                jTableSource.setModel(dtm);
220
        }
221

    
222
        /**
223
         * Insert in the console the message
224
         * 
225
         * @param e
226
         */
227
        public void stateChanged(ChangeEvent e) {
228
                String info = parseInfo(e.getSource().toString());
229
                this.jTextAreaConsole.append(info);
230
        }
231

    
232
        /**
233
         * This method inserts the model in the list with the names of the fields of
234
         * the original table
235
         * 
236
         * @param fieldsNames
237
         */
238
        public void insertFieldsCurrentTable(String[] fieldsNames) {
239
                DefaultListModel dcb = new DefaultListModel();
240
                int cont = fieldsNames.length;
241
                for (int i = 0; i < cont; i++) {
242
                        dcb.addElement(fieldsNames[i]);
243
                }
244
                this.jListOriginalFields.setModel(dcb);
245
                this.jListOriginalFields.setSelectedIndex(0);
246
        }
247

    
248
        /**
249
         * getWindowInfo
250
         * 
251
         * @return windows properties
252
         */
253
        public WindowInfo getWindowInfo() {
254
                WindowInfo info = new WindowInfo(WindowInfo.MODALDIALOG
255
                                | WindowInfo.RESIZABLE);
256
                info.setWidth(780);
257
                info.setHeight(620);
258
                info.setTitle(PluginServices.getText(this, "normalize"));
259
                return info;
260
        }
261

    
262
        /**
263
         * Initialize components and other custom code
264
         */
265
        private void init() {
266

    
267
                /* Initialize components GUI */
268
                initComponents();
269

    
270
                jCheckFirstRow.setEnabled(false);
271
                jTextNumberRows.setEditable(false);
272
                jLabelNumberRows.setEnabled(false);
273

    
274
                /* Final initialize methods to set up the GUI */
275
                updateGUI();
276

    
277
                jListOriginalFields.setEnabled(false);
278

    
279
                if (!isEdit) {
280
                        jRadioAlterTable.setEnabled(false);
281
                        jRadioNewTable.setSelected(true);
282
                        jListOriginalFields.setEnabled(true);
283
                        jListOriginalFields.setSelectedIndex(0);
284
                        model.setInNewTable(true);
285
                }
286
        }
287

    
288
        /**
289
         * This method creates the components of the GUI
290
         */
291
        private void initComponents() {
292
                java.awt.GridBagConstraints gridBagConstraints;
293

    
294
                butGroupDelimiter = new javax.swing.ButtonGroup();
295
                butGroupFieldType = new javax.swing.ButtonGroup();
296
                butGroupOutput = new javax.swing.ButtonGroup();
297
                jPanSampleOutput = new javax.swing.JPanel();
298
                jScrollPane2 = new javax.swing.JScrollPane();
299
                jTableResult = new javax.swing.JTable();
300
                jPanSource = new javax.swing.JPanel();
301
                jScrollPaneSource = new javax.swing.JScrollPane();
302
                jTableSource = new javax.swing.JTable();
303
                jPanFirstRow = new javax.swing.JPanel();
304
                jCheckFirstRow = new javax.swing.JCheckBox();
305
                jTextNumberRows = new javax.swing.JTextField();
306
                jLabelNumberRows = new javax.swing.JLabel();
307
                jPanFields = new javax.swing.JPanel();
308
                jPanFieldList = new javax.swing.JPanel();
309
                jScrollPaneFieldList = new javax.swing.JScrollPane();
310
                jListFieldList = new javax.swing.JList();
311
                jButAddField = new javax.swing.JButton();
312
                jButRemoveField = new javax.swing.JButton();
313
                jButUpField = new javax.swing.JButton();
314
                jButDownField = new javax.swing.JButton();
315
                jPanFieldSettings = new javax.swing.JPanel();
316
                jPanFieldType = new javax.swing.JPanel();
317
                jRadioString = new javax.swing.JRadioButton();
318
                jRadioInteger = new javax.swing.JRadioButton();
319
                jRadioDecimal = new javax.swing.JRadioButton();
320
                jRadioDate = new javax.swing.JRadioButton();
321
                jComboDate = new javax.swing.JComboBox();
322
                jPanSeparators = new javax.swing.JPanel();
323
                jPanFieldSeparators = new javax.swing.JPanel();
324
                jChkTab = new javax.swing.JCheckBox();
325
                jChkSpace = new javax.swing.JCheckBox();
326
                jChkColon = new javax.swing.JCheckBox();
327
                jChkSemicolon = new javax.swing.JCheckBox();
328
                jChkOther = new javax.swing.JCheckBox();
329
                jTextOther = new javax.swing.JTextField();
330
                jChkJoin = new javax.swing.JCheckBox();
331
                jRadioFixed = new javax.swing.JRadioButton();
332
                jRadioCharacter = new javax.swing.JRadioButton();
333
                jTextFieldWidth = new javax.swing.JTextField();
334
                jPanFieldName = new javax.swing.JPanel();
335
                jChkDontImport = new javax.swing.JCheckBox();
336
                jLabFieldName = new javax.swing.JLabel();
337
                jTextFieldName = new javax.swing.JTextField();
338
                jPanel1 = new javax.swing.JPanel();
339
                jPanApply = new javax.swing.JPanel();
340
                jButTest = new javax.swing.JButton();
341
                jPanInField = new javax.swing.JPanel();
342
                jLabDecimal = new javax.swing.JLabel();
343
                jTextDecimal = new javax.swing.JTextField();
344
                jLabThousand = new javax.swing.JLabel();
345
                jTextThousand = new javax.swing.JTextField();
346
                jLabTextDel = new javax.swing.JLabel();
347
                jTextTextDelimiter = new javax.swing.JTextField();
348
                jPanOutput = new javax.swing.JPanel();
349
                jPanOutputOpt = new javax.swing.JPanel();
350
                jRadioAlterTable = new javax.swing.JRadioButton();
351
                jRadioNewTable = new javax.swing.JRadioButton();
352
                jLabelSelFields = new javax.swing.JLabel();
353
                jScrollPaneOriginalFields = new javax.swing.JScrollPane();
354
                jListOriginalFields = new javax.swing.JList();
355
                jPanConsole = new javax.swing.JPanel();
356
                jScrollPaneConsole = new javax.swing.JScrollPane();
357
                jTextAreaConsole = new javax.swing.JTextArea();
358
                jPanFinalButtons = new javax.swing.JPanel();
359
                jButLoad = new javax.swing.JButton();
360
                jButRun = new javax.swing.JButton();
361
                jButCancel = new javax.swing.JButton();
362
                jButSave = new javax.swing.JButton();
363

    
364
                setMinimumSize(new java.awt.Dimension(600, 620));
365
                setPreferredSize(new java.awt.Dimension(600, 620));
366
                addFocusListener(new java.awt.event.FocusAdapter() {
367
                        public void focusGained(java.awt.event.FocusEvent evt) {
368
                                mainPanelGetFocus(evt);
369
                        }
370
                });
371
                setLayout(new java.awt.GridBagLayout());
372

    
373
                jPanSampleOutput.setBorder(javax.swing.BorderFactory
374
                                .createTitledBorder("Sample output"));
375
                jPanSampleOutput.setLayout(new java.awt.GridBagLayout());
376

    
377
                jScrollPane2
378
                                .setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
379
                jScrollPane2.setAutoscrolls(true);
380
                jScrollPane2.setMinimumSize(new java.awt.Dimension(100, 90));
381
                jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 90));
382

    
383
                jTableResult.setFont(new java.awt.Font("Courier New", 0, 11));
384
                jTableResult.setModel(new javax.swing.table.DefaultTableModel(
385
                                new Object[][] { {}, {}, {} }, new String[] {
386

    
387
                                }));
388
                jTableResult.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
389
                jTableResult.setEnabled(false);
390
                jScrollPane2.setViewportView(jTableResult);
391

    
392
                gridBagConstraints = new java.awt.GridBagConstraints();
393
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
394
                gridBagConstraints.weightx = 1.0;
395
                jPanSampleOutput.add(jScrollPane2, gridBagConstraints);
396

    
397
                gridBagConstraints = new java.awt.GridBagConstraints();
398
                gridBagConstraints.gridx = 0;
399
                gridBagConstraints.gridy = 2;
400
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
401
                gridBagConstraints.weightx = 1.0;
402
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
403
                add(jPanSampleOutput, gridBagConstraints);
404

    
405
                jPanSource.setBorder(javax.swing.BorderFactory
406
                                .createTitledBorder("Source"));
407
                jPanSource.setMinimumSize(new java.awt.Dimension(36, 125));
408
                jPanSource.setLayout(new java.awt.GridBagLayout());
409

    
410
                jScrollPaneSource.setMinimumSize(new java.awt.Dimension(100, 90));
411
                jScrollPaneSource.setPreferredSize(new java.awt.Dimension(100, 90));
412

    
413
                jTableSource.setFont(new java.awt.Font("Courier New", 0, 11));
414
                jTableSource.setModel(getSourceData());
415
                jTableSource.getTableHeader().setReorderingAllowed(false);
416
                jScrollPaneSource.setViewportView(jTableSource);
417

    
418
                gridBagConstraints = new java.awt.GridBagConstraints();
419
                gridBagConstraints.gridx = 0;
420
                gridBagConstraints.gridy = 0;
421
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
422
                gridBagConstraints.weightx = 1.0;
423
                gridBagConstraints.weighty = 1.0;
424
                jPanSource.add(jScrollPaneSource, gridBagConstraints);
425

    
426
                jPanFirstRow.setLayout(new java.awt.GridBagLayout());
427

    
428
                jCheckFirstRow.setText("Don't normalize the first row");
429
                jCheckFirstRow.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
430
                jCheckFirstRow.addActionListener(new java.awt.event.ActionListener() {
431
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
432
                                EvCheckFirstRow(evt);
433
                        }
434
                });
435
                gridBagConstraints = new java.awt.GridBagConstraints();
436
                gridBagConstraints.gridx = 0;
437
                gridBagConstraints.gridy = 0;
438
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
439
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
440
                gridBagConstraints.insets = new java.awt.Insets(3, 10, 0, 0);
441
                jPanFirstRow.add(jCheckFirstRow, gridBagConstraints);
442

    
443
                jTextNumberRows.setText("0");
444
                jTextNumberRows.setInputVerifier(new IntVerifier());
445
                jTextNumberRows.setMaximumSize(new java.awt.Dimension(30, 18));
446
                jTextNumberRows.setMinimumSize(new java.awt.Dimension(30, 18));
447
                jTextNumberRows.setPreferredSize(new java.awt.Dimension(30, 18));
448

    
449
                jTextNumberRows.addKeyListener(new java.awt.event.KeyAdapter() {
450
                        public void keyReleased(java.awt.event.KeyEvent evt) {
451
                                firstRowsvalueChange();
452
                        }
453
                });
454
                gridBagConstraints = new java.awt.GridBagConstraints();
455
                gridBagConstraints.gridx = 1;
456
                gridBagConstraints.gridy = 0;
457
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
458
                gridBagConstraints.insets = new java.awt.Insets(2, 3, 0, 5);
459
                jPanFirstRow.add(jTextNumberRows, gridBagConstraints);
460

    
461
                jLabelNumberRows.setText("rows");
462
                gridBagConstraints = new java.awt.GridBagConstraints();
463
                gridBagConstraints.gridx = 2;
464
                gridBagConstraints.gridy = 0;
465
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
466
                gridBagConstraints.weightx = 1.0;
467
                gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0);
468
                jPanFirstRow.add(jLabelNumberRows, gridBagConstraints);
469

    
470
                gridBagConstraints = new java.awt.GridBagConstraints();
471
                gridBagConstraints.gridx = 0;
472
                gridBagConstraints.gridy = 1;
473
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
474
                gridBagConstraints.weightx = 1.0;
475
                jPanSource.add(jPanFirstRow, gridBagConstraints);
476

    
477
                gridBagConstraints = new java.awt.GridBagConstraints();
478
                gridBagConstraints.gridx = 0;
479
                gridBagConstraints.gridy = 0;
480
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
481
                gridBagConstraints.weightx = 1.0;
482
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
483
                add(jPanSource, gridBagConstraints);
484

    
485
                jPanFields.setLayout(new java.awt.GridBagLayout());
486

    
487
                jPanFieldList.setBorder(javax.swing.BorderFactory
488
                                .createTitledBorder("Fields"));
489
                jPanFieldList.setLayout(new java.awt.GridBagLayout());
490

    
491
                jScrollPaneFieldList.setPreferredSize(new java.awt.Dimension(100, 150));
492

    
493
                jListFieldList
494
                                .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
495
                jListFieldList.addMouseListener(new MouseListener() {
496
                        public void mouseClicked(MouseEvent e) {
497
                        }
498

    
499
                        public void mouseEntered(MouseEvent e) {
500
                        }
501

    
502
                        public void mouseExited(MouseEvent e) {
503
                        }
504

    
505
                        public void mousePressed(MouseEvent e) {
506
                                selectedField = jListFieldList.getSelectedIndex();
507
                        }
508

    
509
                        public void mouseReleased(MouseEvent e) {
510
                        }
511
                });
512
                jListFieldList
513
                                .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
514
                                        public void valueChanged(
515
                                                        javax.swing.event.ListSelectionEvent evt) {
516
                                                jListFieldListValueChanged(evt);
517
                                        }
518
                                });
519
                jScrollPaneFieldList.setViewportView(jListFieldList);
520

    
521
                gridBagConstraints = new java.awt.GridBagConstraints();
522
                gridBagConstraints.gridx = 0;
523
                gridBagConstraints.gridy = 0;
524
                gridBagConstraints.gridheight = 4;
525
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
526
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
527
                gridBagConstraints.weightx = 1.0;
528
                gridBagConstraints.weighty = 1.0;
529
                jPanFieldList.add(jScrollPaneFieldList, gridBagConstraints);
530

    
531
                jButAddField.setBorderPainted(false);
532
                jButAddField.setMargin(new java.awt.Insets(5, 5, 5, 5));
533
                jButAddField.setMaximumSize(new java.awt.Dimension(30, 30));
534
                jButAddField.setMinimumSize(new java.awt.Dimension(30, 30));
535
                jButAddField.addActionListener(new java.awt.event.ActionListener() {
536
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
537
                                ActionButtonAddField(evt);
538
                        }
539
                });
540
                gridBagConstraints = new java.awt.GridBagConstraints();
541
                gridBagConstraints.gridx = 1;
542
                gridBagConstraints.gridy = 2;
543
                gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
544
                gridBagConstraints.weighty = 1.0;
545
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
546
                jPanFieldList.add(jButAddField, gridBagConstraints);
547

    
548
                jButRemoveField.setBorderPainted(false);
549
                jButRemoveField.setMargin(new java.awt.Insets(5, 5, 5, 5));
550
                jButRemoveField.setMaximumSize(new java.awt.Dimension(30, 30));
551
                jButRemoveField.addActionListener(new java.awt.event.ActionListener() {
552
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
553
                                ActionButtonRemove(evt);
554
                        }
555
                });
556
                gridBagConstraints = new java.awt.GridBagConstraints();
557
                gridBagConstraints.gridx = 1;
558
                gridBagConstraints.gridy = 3;
559
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
560
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
561
                jPanFieldList.add(jButRemoveField, gridBagConstraints);
562

    
563
                jButUpField.setForeground(java.awt.SystemColor.activeCaptionBorder);
564

    
565
                jButUpField.setBorderPainted(false);
566
                jButUpField.setMargin(new java.awt.Insets(5, 5, 5, 5));
567
                jButUpField.setMaximumSize(new java.awt.Dimension(30, 30));
568
                jButUpField.addActionListener(new java.awt.event.ActionListener() {
569
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
570
                                ActionButtonUp(evt);
571
                        }
572
                });
573
                gridBagConstraints = new java.awt.GridBagConstraints();
574
                gridBagConstraints.gridx = 1;
575
                gridBagConstraints.gridy = 0;
576
                gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
577
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
578
                jPanFieldList.add(jButUpField, gridBagConstraints);
579

    
580
                jButDownField.setBorderPainted(false);
581
                jButDownField.setMargin(new java.awt.Insets(5, 5, 5, 5));
582
                jButDownField.setMaximumSize(new java.awt.Dimension(30, 30));
583
                jButDownField.setMinimumSize(new java.awt.Dimension(30, 30));
584
                jButDownField.addActionListener(new java.awt.event.ActionListener() {
585
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
586
                                ActionButtonDown(evt);
587
                        }
588
                });
589
                gridBagConstraints = new java.awt.GridBagConstraints();
590
                gridBagConstraints.gridx = 1;
591
                gridBagConstraints.gridy = 1;
592
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
593
                gridBagConstraints.weighty = 1.0;
594
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5);
595
                jPanFieldList.add(jButDownField, gridBagConstraints);
596

    
597
                gridBagConstraints = new java.awt.GridBagConstraints();
598
                gridBagConstraints.gridx = 0;
599
                gridBagConstraints.gridy = 1;
600
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
601
                gridBagConstraints.weightx = 1.0;
602
                jPanFields.add(jPanFieldList, gridBagConstraints);
603

    
604
                jPanFieldSettings.setBorder(javax.swing.BorderFactory
605
                                .createTitledBorder("Field settings"));
606
                jPanFieldSettings.setLayout(new java.awt.GridBagLayout());
607

    
608
                jPanFieldType.setBorder(javax.swing.BorderFactory
609
                                .createTitledBorder("Select field type"));
610
                jPanFieldType.setLayout(new java.awt.GridBagLayout());
611

    
612
                butGroupFieldType.add(jRadioString);
613
                jRadioString.setSelected(true);
614
                jRadioString.setText("String");
615
                jRadioString.setAlignmentY(1.0F);
616
                jRadioString.addActionListener(new java.awt.event.ActionListener() {
617
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
618
                                updateStringType(evt);
619
                        }
620
                });
621
                gridBagConstraints = new java.awt.GridBagConstraints();
622
                gridBagConstraints.gridx = 0;
623
                gridBagConstraints.gridy = 0;
624
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
625
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
626
                jPanFieldType.add(jRadioString, gridBagConstraints);
627

    
628
                butGroupFieldType.add(jRadioInteger);
629
                jRadioInteger.setText("Integer");
630
                jRadioInteger.addActionListener(new java.awt.event.ActionListener() {
631
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
632
                                updateIntegerType(evt);
633
                        }
634
                });
635
                gridBagConstraints = new java.awt.GridBagConstraints();
636
                gridBagConstraints.gridx = 0;
637
                gridBagConstraints.gridy = 1;
638
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
639
                gridBagConstraints.weighty = 1.0;
640
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
641
                jPanFieldType.add(jRadioInteger, gridBagConstraints);
642

    
643
                butGroupFieldType.add(jRadioDecimal);
644
                jRadioDecimal.setText("Decimal");
645
                jRadioDecimal.addActionListener(new java.awt.event.ActionListener() {
646
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
647
                                updateDecimalType(evt);
648
                        }
649
                });
650
                gridBagConstraints = new java.awt.GridBagConstraints();
651
                gridBagConstraints.gridx = 0;
652
                gridBagConstraints.gridy = 2;
653
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
654
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
655
                jPanFieldType.add(jRadioDecimal, gridBagConstraints);
656

    
657
                butGroupFieldType.add(jRadioDate);
658
                jRadioDate.setText("Date");
659
                jRadioDate.addItemListener(new java.awt.event.ItemListener() {
660
                        public void itemStateChanged(java.awt.event.ItemEvent evt) {
661
                                dateStateChanged(evt);
662
                        }
663
                });
664
                gridBagConstraints = new java.awt.GridBagConstraints();
665
                gridBagConstraints.gridx = 0;
666
                gridBagConstraints.gridy = 3;
667
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
668
                gridBagConstraints.weighty = 1.0;
669
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
670
                jPanFieldType.add(jRadioDate, gridBagConstraints);
671

    
672
                jComboDate.setEditable(true);
673
                jComboDate.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
674
                                "dd/MM/yy", "dd/MM/yyyy", "MM/dd/yyyy", "yyyy/MM/dd",
675
                                "yy/MM/dd" }));
676
                jComboDate.setEnabled(false);
677
                jComboDate.addActionListener(new java.awt.event.ActionListener() {
678
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
679
                                ActionListDateFormat(evt);
680
                        }
681
                });
682
                gridBagConstraints = new java.awt.GridBagConstraints();
683
                gridBagConstraints.gridx = 0;
684
                gridBagConstraints.gridy = 4;
685
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
686
                gridBagConstraints.weightx = 1.0;
687
                gridBagConstraints.weighty = 1.0;
688
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
689
                jPanFieldType.add(jComboDate, gridBagConstraints);
690

    
691
                gridBagConstraints = new java.awt.GridBagConstraints();
692
                gridBagConstraints.gridx = 0;
693
                gridBagConstraints.gridy = 1;
694
                gridBagConstraints.gridheight = 2;
695
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
696
                jPanFieldSettings.add(jPanFieldType, gridBagConstraints);
697

    
698
                jPanSeparators.setBorder(javax.swing.BorderFactory
699
                                .createTitledBorder("Set how field delimites with next one"));
700
                jPanSeparators.setRequestFocusEnabled(false);
701
                jPanSeparators.setLayout(new java.awt.GridBagLayout());
702

    
703
                jPanFieldSeparators.setBorder(javax.swing.BorderFactory
704
                                .createTitledBorder("Select field separators"));
705
                jPanFieldSeparators.setEnabled(false);
706
                jPanFieldSeparators.setLayout(new java.awt.GridBagLayout());
707

    
708
                jChkTab.setText("Tab");
709
                jChkTab.addActionListener(new java.awt.event.ActionListener() {
710
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
711
                                ActionTab(evt);
712
                        }
713
                });
714
                gridBagConstraints = new java.awt.GridBagConstraints();
715
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
716
                jPanFieldSeparators.add(jChkTab, gridBagConstraints);
717

    
718
                jChkSpace.setText("Space");
719
                jChkSpace.addActionListener(new java.awt.event.ActionListener() {
720
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
721
                                ActionSpace(evt);
722
                        }
723
                });
724
                gridBagConstraints = new java.awt.GridBagConstraints();
725
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
726
                jPanFieldSeparators.add(jChkSpace, gridBagConstraints);
727

    
728
                jChkColon.setText("Colon");
729
                jChkColon.addActionListener(new java.awt.event.ActionListener() {
730
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
731
                                ActionColon(evt);
732
                        }
733
                });
734
                gridBagConstraints = new java.awt.GridBagConstraints();
735
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
736
                jPanFieldSeparators.add(jChkColon, gridBagConstraints);
737

    
738
                jChkSemicolon.setText("Semicolon");
739
                jChkSemicolon.addActionListener(new java.awt.event.ActionListener() {
740
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
741
                                ActionSemicolon(evt);
742
                        }
743
                });
744
                gridBagConstraints = new java.awt.GridBagConstraints();
745
                gridBagConstraints.gridy = 1;
746
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
747
                jPanFieldSeparators.add(jChkSemicolon, gridBagConstraints);
748

    
749
                jChkOther.setText("Other");
750
                jChkOther.addActionListener(new java.awt.event.ActionListener() {
751
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
752
                                enableOtherText(evt);
753
                        }
754
                });
755
                gridBagConstraints = new java.awt.GridBagConstraints();
756
                gridBagConstraints.gridy = 1;
757
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
758
                jPanFieldSeparators.add(jChkOther, gridBagConstraints);
759

    
760
                jTextOther.setEditable(false);
761
                jTextOther.setMinimumSize(new java.awt.Dimension(30, 20));
762
                jTextOther.setPreferredSize(new java.awt.Dimension(30, 20));
763
                jTextOther.addActionListener(new java.awt.event.ActionListener() {
764
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
765
                                ActionTextOther(evt);
766
                        }
767
                });
768
                gridBagConstraints = new java.awt.GridBagConstraints();
769
                gridBagConstraints.gridy = 1;
770
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
771
                jPanFieldSeparators.add(jTextOther, gridBagConstraints);
772

    
773
                jChkJoin.setText("Join consecutive delimiters ");
774
                jChkJoin.addActionListener(new java.awt.event.ActionListener() {
775
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
776
                                ActionJoinSep(evt);
777
                        }
778
                });
779
                gridBagConstraints = new java.awt.GridBagConstraints();
780
                gridBagConstraints.gridx = 0;
781
                gridBagConstraints.gridy = 3;
782
                gridBagConstraints.gridwidth = 3;
783
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
784
                gridBagConstraints.insets = new java.awt.Insets(10, 0, 0, 0);
785
                jPanFieldSeparators.add(jChkJoin, gridBagConstraints);
786

    
787
                gridBagConstraints = new java.awt.GridBagConstraints();
788
                gridBagConstraints.gridx = 0;
789
                gridBagConstraints.gridy = 1;
790
                gridBagConstraints.gridwidth = 3;
791
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
792
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
793
                gridBagConstraints.weighty = 1.0;
794
                jPanSeparators.add(jPanFieldSeparators, gridBagConstraints);
795

    
796
                butGroupDelimiter.add(jRadioFixed);
797
                jRadioFixed.setText("Fixed width");
798
                jRadioFixed.addActionListener(new java.awt.event.ActionListener() {
799
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
800
                                fixedWidthEnable(evt);
801
                        }
802
                });
803
                gridBagConstraints = new java.awt.GridBagConstraints();
804
                gridBagConstraints.gridx = 1;
805
                gridBagConstraints.gridy = 0;
806
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
807
                jPanSeparators.add(jRadioFixed, gridBagConstraints);
808

    
809
                butGroupDelimiter.add(jRadioCharacter);
810
                jRadioCharacter.setSelected(true);
811
                jRadioCharacter.setText("Character");
812
                jRadioCharacter.addActionListener(new java.awt.event.ActionListener() {
813
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
814
                                charDelimitedEnable(evt);
815
                        }
816
                });
817
                gridBagConstraints = new java.awt.GridBagConstraints();
818
                gridBagConstraints.gridx = 0;
819
                gridBagConstraints.gridy = 0;
820
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
821
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
822
                jPanSeparators.add(jRadioCharacter, gridBagConstraints);
823

    
824
                jTextFieldWidth.setEditable(false);
825
                jTextFieldWidth.setInputVerifier(new IntVerifier());
826
                jTextFieldWidth.setMinimumSize(new java.awt.Dimension(40, 20));
827
                jTextFieldWidth.setPreferredSize(new java.awt.Dimension(40, 20));
828
                jTextFieldWidth.addKeyListener(new KeyListener() {
829
                        public void keyPressed(KeyEvent evt) {
830
                        }
831

    
832
                        public void keyTyped(KeyEvent evt) {
833
                        }
834

    
835
                        public void keyReleased(KeyEvent e) {
836
                                ActionTextFixedWidth(e);
837
                        }
838
                });
839
                gridBagConstraints = new java.awt.GridBagConstraints();
840
                gridBagConstraints.gridx = 2;
841
                gridBagConstraints.gridy = 0;
842
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5);
843
                jPanSeparators.add(jTextFieldWidth, gridBagConstraints);
844

    
845
                gridBagConstraints = new java.awt.GridBagConstraints();
846
                gridBagConstraints.gridx = 1;
847
                gridBagConstraints.gridy = 1;
848
                gridBagConstraints.gridheight = 2;
849
                gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
850
                jPanFieldSettings.add(jPanSeparators, gridBagConstraints);
851

    
852
                jPanFieldName.setLayout(new java.awt.GridBagLayout());
853

    
854
                jChkDontImport.setText("Don't import");
855
                jChkDontImport.addActionListener(new java.awt.event.ActionListener() {
856
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
857
                                ActionDontImport(evt);
858
                        }
859
                });
860
                gridBagConstraints = new java.awt.GridBagConstraints();
861
                gridBagConstraints.gridx = 3;
862
                gridBagConstraints.insets = new java.awt.Insets(5, 15, 5, 5);
863
                jPanFieldName.add(jChkDontImport, gridBagConstraints);
864

    
865
                jLabFieldName.setText("Field name:");
866
                gridBagConstraints = new java.awt.GridBagConstraints();
867
                gridBagConstraints.gridx = 0;
868
                gridBagConstraints.gridy = 0;
869
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
870
                jPanFieldName.add(jLabFieldName, gridBagConstraints);
871

    
872
                jTextFieldName.setText("Field1");
873
                jTextFieldName.setMinimumSize(new java.awt.Dimension(100, 20));
874
                jTextFieldName.setPreferredSize(new java.awt.Dimension(100, 20));
875
                jTextFieldName.addKeyListener(new KeyListener() {
876
                        public void keyPressed(KeyEvent e) {
877
                        }
878

    
879
                        public void keyReleased(KeyEvent e) {
880
                                KeyChangesFieldName(e);
881
                        }
882

    
883
                        public void keyTyped(KeyEvent e) {
884
                        }
885
                });
886
                gridBagConstraints = new java.awt.GridBagConstraints();
887
                gridBagConstraints.gridx = 1;
888
                gridBagConstraints.gridy = 0;
889
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
890
                gridBagConstraints.weightx = 1.0;
891
                gridBagConstraints.insets = new java.awt.Insets(5, 15, 5, 5);
892
                jPanFieldName.add(jTextFieldName, gridBagConstraints);
893

    
894
                gridBagConstraints = new java.awt.GridBagConstraints();
895
                gridBagConstraints.gridx = 0;
896
                gridBagConstraints.gridy = 0;
897
                gridBagConstraints.gridwidth = 3;
898
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
899
                gridBagConstraints.weightx = 1.0;
900
                jPanFieldSettings.add(jPanFieldName, gridBagConstraints);
901

    
902
                jPanel1.setLayout(new java.awt.GridBagLayout());
903

    
904
                jPanApply.setLayout(new java.awt.GridBagLayout());
905

    
906
                jButTest.setText("Test");
907
                jButTest.addActionListener(new java.awt.event.ActionListener() {
908
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
909
                                testNormalizer(evt);
910
                        }
911
                });
912
                gridBagConstraints = new java.awt.GridBagConstraints();
913
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
914
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5);
915
                jPanApply.add(jButTest, gridBagConstraints);
916

    
917
                gridBagConstraints = new java.awt.GridBagConstraints();
918
                gridBagConstraints.gridx = 2;
919
                gridBagConstraints.gridy = 2;
920
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
921
                gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
922
                jPanel1.add(jPanApply, gridBagConstraints);
923

    
924
                gridBagConstraints = new java.awt.GridBagConstraints();
925
                gridBagConstraints.gridx = 2;
926
                gridBagConstraints.gridy = 2;
927
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
928
                jPanFieldSettings.add(jPanel1, gridBagConstraints);
929

    
930
                jPanInField.setBorder(javax.swing.BorderFactory
931
                                .createTitledBorder("Set separators"));
932
                jPanInField.setLayout(new java.awt.GridBagLayout());
933

    
934
                jLabDecimal.setText("Decimal");
935
                gridBagConstraints = new java.awt.GridBagConstraints();
936
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
937
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
938
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 15);
939
                jPanInField.add(jLabDecimal, gridBagConstraints);
940

    
941
                jTextDecimal.setText(".");
942
                jTextDecimal.setInputVerifier(new CharVerifier());
943
                jTextDecimal.setMinimumSize(new java.awt.Dimension(30, 20));
944
                jTextDecimal.setPreferredSize(new java.awt.Dimension(30, 20));
945
                jTextDecimal.addFocusListener(new java.awt.event.FocusAdapter() {
946
                        public void focusLost(java.awt.event.FocusEvent evt) {
947
                                ActionDecimal(evt);
948
                        }
949
                });
950
                gridBagConstraints = new java.awt.GridBagConstraints();
951
                gridBagConstraints.gridx = 1;
952
                gridBagConstraints.gridy = 0;
953
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
954
                gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 5);
955
                jPanInField.add(jTextDecimal, gridBagConstraints);
956

    
957
                jLabThousand.setText("Thousand");
958
                gridBagConstraints = new java.awt.GridBagConstraints();
959
                gridBagConstraints.gridx = 0;
960
                gridBagConstraints.gridy = 1;
961
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
962
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
963
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 15);
964
                jPanInField.add(jLabThousand, gridBagConstraints);
965

    
966
                jTextThousand.setText(null);
967
                jTextThousand.setPreferredSize(new java.awt.Dimension(30, 20));
968
                jTextThousand.addFocusListener(new java.awt.event.FocusAdapter() {
969
                        public void focusLost(java.awt.event.FocusEvent evt) {
970
                                ActionThousand(evt);
971
                        }
972
                });
973
                gridBagConstraints = new java.awt.GridBagConstraints();
974
                gridBagConstraints.gridx = 1;
975
                gridBagConstraints.gridy = 1;
976
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
977
                gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 5);
978
                jPanInField.add(jTextThousand, gridBagConstraints);
979

    
980
                jLabTextDel.setText("Text:");
981
                gridBagConstraints = new java.awt.GridBagConstraints();
982
                gridBagConstraints.gridx = 0;
983
                gridBagConstraints.gridy = 2;
984
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
985
                gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
986
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 15);
987
                jPanInField.add(jLabTextDel, gridBagConstraints);
988

    
989
                jTextTextDelimiter.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
990
                jTextTextDelimiter.setText("\"");
991
                jTextTextDelimiter.setPreferredSize(new java.awt.Dimension(30, 20));
992
                jTextTextDelimiter.addFocusListener(new java.awt.event.FocusAdapter() {
993
                        public void focusLost(java.awt.event.FocusEvent evt) {
994
                                ActionTextText(evt);
995
                        }
996
                });
997
                gridBagConstraints = new java.awt.GridBagConstraints();
998
                gridBagConstraints.gridx = 1;
999
                gridBagConstraints.gridy = 2;
1000
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1001
                gridBagConstraints.insets = new java.awt.Insets(5, 0, 5, 5);
1002
                jPanInField.add(jTextTextDelimiter, gridBagConstraints);
1003

    
1004
                gridBagConstraints = new java.awt.GridBagConstraints();
1005
                gridBagConstraints.gridx = 2;
1006
                gridBagConstraints.gridy = 1;
1007
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1008
                jPanFieldSettings.add(jPanInField, gridBagConstraints);
1009

    
1010
                gridBagConstraints = new java.awt.GridBagConstraints();
1011
                gridBagConstraints.gridx = 1;
1012
                gridBagConstraints.gridy = 1;
1013
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1014
                jPanFields.add(jPanFieldSettings, gridBagConstraints);
1015

    
1016
                gridBagConstraints = new java.awt.GridBagConstraints();
1017
                gridBagConstraints.gridx = 0;
1018
                gridBagConstraints.gridy = 1;
1019
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1020
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1021
                add(jPanFields, gridBagConstraints);
1022

    
1023
                jPanOutput.setLayout(new java.awt.GridBagLayout());
1024

    
1025
                jPanOutputOpt.setBorder(javax.swing.BorderFactory
1026
                                .createTitledBorder("Output options"));
1027
                jPanOutputOpt.setLayout(new java.awt.GridBagLayout());
1028

    
1029
                butGroupOutput.add(jRadioAlterTable);
1030
                jRadioAlterTable.setSelected(true);
1031
                jRadioAlterTable.setText("Alter table");
1032
                jRadioAlterTable.addActionListener(new java.awt.event.ActionListener() {
1033
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1034
                                ActionAlterTable(evt);
1035
                        }
1036
                });
1037
                gridBagConstraints = new java.awt.GridBagConstraints();
1038
                gridBagConstraints.gridx = 0;
1039
                gridBagConstraints.gridy = 0;
1040
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1041
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1042
                jPanOutputOpt.add(jRadioAlterTable, gridBagConstraints);
1043

    
1044
                butGroupOutput.add(jRadioNewTable);
1045
                jRadioNewTable.setText("Create new table");
1046
                jRadioNewTable.addActionListener(new java.awt.event.ActionListener() {
1047
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1048
                                ActionNewTable(evt);
1049
                        }
1050
                });
1051
                gridBagConstraints = new java.awt.GridBagConstraints();
1052
                gridBagConstraints.gridx = 1;
1053
                gridBagConstraints.gridy = 0;
1054
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1055
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1056
                jPanOutputOpt.add(jRadioNewTable, gridBagConstraints);
1057

    
1058
                jLabelSelFields
1059
                                .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
1060
                jLabelSelFields.setText("Select join field");
1061
                jLabelSelFields
1062
                                .setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
1063
                gridBagConstraints = new java.awt.GridBagConstraints();
1064
                gridBagConstraints.gridx = 0;
1065
                gridBagConstraints.gridy = 1;
1066
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1067
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
1068
                gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 10);
1069
                jPanOutputOpt.add(jLabelSelFields, gridBagConstraints);
1070

    
1071
                jScrollPaneOriginalFields.setViewportView(jListOriginalFields);
1072

    
1073
                gridBagConstraints = new java.awt.GridBagConstraints();
1074
                gridBagConstraints.gridx = 1;
1075
                gridBagConstraints.gridy = 1;
1076
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1077
                gridBagConstraints.weighty = 1.0;
1078
                jPanOutputOpt.add(jScrollPaneOriginalFields, gridBagConstraints);
1079

    
1080
                gridBagConstraints = new java.awt.GridBagConstraints();
1081
                gridBagConstraints.gridy = 0;
1082
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1083
                gridBagConstraints.weighty = 1.0;
1084
                jPanOutput.add(jPanOutputOpt, gridBagConstraints);
1085

    
1086
                jPanConsole.setBorder(javax.swing.BorderFactory
1087
                                .createTitledBorder("Error console"));
1088
                jPanConsole.setLayout(new java.awt.GridBagLayout());
1089

    
1090
                jScrollPaneConsole.setBorder(javax.swing.BorderFactory
1091
                                .createLineBorder(java.awt.SystemColor.controlShadow));
1092

    
1093
                jTextAreaConsole.setColumns(20);
1094
                jTextAreaConsole.setEditable(false);
1095
                jTextAreaConsole.setRows(5);
1096
                jScrollPaneConsole.setViewportView(jTextAreaConsole);
1097

    
1098
                gridBagConstraints = new java.awt.GridBagConstraints();
1099
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1100
                gridBagConstraints.weightx = 1.0;
1101
                gridBagConstraints.weighty = 1.0;
1102
                jPanConsole.add(jScrollPaneConsole, gridBagConstraints);
1103

    
1104
                gridBagConstraints = new java.awt.GridBagConstraints();
1105
                gridBagConstraints.gridx = 1;
1106
                gridBagConstraints.gridy = 0;
1107
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1108
                gridBagConstraints.weightx = 1.0;
1109
                gridBagConstraints.weighty = 1.0;
1110
                jPanOutput.add(jPanConsole, gridBagConstraints);
1111

    
1112
                jPanFinalButtons.setLayout(new java.awt.GridBagLayout());
1113

    
1114
                jButLoad.setText("Load...");
1115
                jButLoad.addActionListener(new java.awt.event.ActionListener() {
1116
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1117
                                jButLoadActionPerformed(evt);
1118
                        }
1119
                });
1120
                gridBagConstraints = new java.awt.GridBagConstraints();
1121
                gridBagConstraints.gridx = 0;
1122
                gridBagConstraints.gridy = 0;
1123
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1124
                gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
1125
                gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
1126
                jPanFinalButtons.add(jButLoad, gridBagConstraints);
1127

    
1128
                jButRun.setText("Run");
1129
                jButRun.addActionListener(new java.awt.event.ActionListener() {
1130
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1131
                                runNormalizer(evt);
1132
                        }
1133
                });
1134
                gridBagConstraints = new java.awt.GridBagConstraints();
1135
                gridBagConstraints.gridx = 0;
1136
                gridBagConstraints.gridy = 2;
1137
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1138
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1139
                jPanFinalButtons.add(jButRun, gridBagConstraints);
1140

    
1141
                jButCancel.setText("Cancel");
1142
                jButCancel.addActionListener(new java.awt.event.ActionListener() {
1143
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1144
                                ActionCancel(evt);
1145
                        }
1146
                });
1147
                gridBagConstraints = new java.awt.GridBagConstraints();
1148
                gridBagConstraints.gridx = 0;
1149
                gridBagConstraints.gridy = 3;
1150
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1151
                gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
1152
                gridBagConstraints.weighty = 1.0;
1153
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1154
                jPanFinalButtons.add(jButCancel, gridBagConstraints);
1155

    
1156
                jButSave.setText("Save...");
1157
                jButSave.addActionListener(new java.awt.event.ActionListener() {
1158
                        public void actionPerformed(java.awt.event.ActionEvent evt) {
1159
                                jButSaveActionPerformed(evt);
1160
                        }
1161
                });
1162
                gridBagConstraints = new java.awt.GridBagConstraints();
1163
                gridBagConstraints.gridx = 0;
1164
                gridBagConstraints.gridy = 1;
1165
                gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1166
                gridBagConstraints.weightx = 1.0;
1167
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1168
                jPanFinalButtons.add(jButSave, gridBagConstraints);
1169

    
1170
                gridBagConstraints = new java.awt.GridBagConstraints();
1171
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1172
                jPanOutput.add(jPanFinalButtons, gridBagConstraints);
1173

    
1174
                gridBagConstraints = new java.awt.GridBagConstraints();
1175
                gridBagConstraints.gridx = 0;
1176
                gridBagConstraints.gridy = 3;
1177
                gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
1178
                gridBagConstraints.weighty = 1.0;
1179
                gridBagConstraints.insets = new java.awt.Insets(0, 5, 5, 5);
1180
                add(jPanOutput, gridBagConstraints);
1181
        }
1182

    
1183
        // *****************************************
1184
        // PANEL EVENTS
1185

    
1186
        /**
1187
         * This method runs when check FirstRow is selected or deselected
1188
         * 
1189
         * @param evt
1190
         */
1191
        private void EvCheckFirstRow(java.awt.event.ActionEvent evt) {
1192
                /* DON'T Normalize the first rows */
1193
                if (jCheckFirstRow.isSelected()) {
1194
                        jTextNumberRows.setText("1");
1195
                        jTextNumberRows.setEditable(true);
1196
                        model.setFirstRows(Integer.parseInt(jTextNumberRows.getText()));
1197
                        this.jTextNumberRows.requestFocus();
1198
                        model.getSamplesFromFile(model.getFirstRows());
1199
                        jTableSource.setModel(getSourceData());
1200
                }
1201
                /* Normalize the first rows */
1202
                else {
1203
                        jTextNumberRows.setText("0");
1204
                        jTextNumberRows.setEditable(false);
1205
                        model.setFirstRows(0);
1206
                        model.getSamplesFromFile(model.getFirstRows());
1207
                        jTableSource.setModel(getSourceData());
1208
                }
1209
        }
1210

    
1211
        /**
1212
         * This method runs when textField is modify
1213
         * 
1214
         */
1215
        private void firstRowsvalueChange() {
1216
                try {
1217
                        model.setFirstRows(Integer.parseInt(jTextNumberRows.getText()));
1218
                        model.getSamplesFromFile(model.getFirstRows());
1219
                        jTableSource.setModel(getSourceData());
1220
                        jTableSource.validate();
1221
                } catch (Exception e) {
1222
                        jTextNumberRows.requestFocus();
1223
                }
1224
        }
1225

    
1226
        /**
1227
         * This method runs when check Don't Import is selected or deselected
1228
         * 
1229
         * @param evt
1230
         */
1231
        private void ActionDontImport(java.awt.event.ActionEvent evt) {
1232
                setDirty(true);
1233
        }
1234

    
1235
        /**
1236
         * This method runs when combo Date Format has changed
1237
         * 
1238
         * @param evt
1239
         */
1240
        private void ActionListDateFormat(java.awt.event.ActionEvent evt) {
1241
                setDirty(true);
1242
        }
1243

    
1244
        /**
1245
         * This method runs when text fixed width has changed
1246
         * 
1247
         * @param evt
1248
         */
1249
        private void ActionTextFixedWidth(java.awt.event.KeyEvent evt) {
1250

    
1251
                boolean vali = new IntVerifier().verify(jTextFieldWidth);
1252
                if (vali) {
1253
                        setDirty(true);
1254
                } else {
1255
                        jTextFieldWidth.setText("1");
1256
                        setDirty(true);
1257
                }
1258
        }
1259

    
1260
        /**
1261
         * This method runs when check TAB is selected or deselected
1262
         * 
1263
         * @param evt
1264
         */
1265
        private void ActionTab(java.awt.event.ActionEvent evt) {
1266
                setDirty(true);
1267
        }
1268

    
1269
        /**
1270
         * This method runs when check SPACE is selected or deselected
1271
         * 
1272
         * @param evt
1273
         */
1274
        private void ActionSpace(java.awt.event.ActionEvent evt) {
1275
                setDirty(true);
1276
        }
1277

    
1278
        /**
1279
         * This method runs when check COLON is selected or deselected
1280
         * 
1281
         * @param evt
1282
         */
1283
        private void ActionColon(java.awt.event.ActionEvent evt) {
1284
                setDirty(true);
1285
        }
1286

    
1287
        /**
1288
         * This method runs when check SEMICOLON is selected or deselected
1289
         * 
1290
         * @param evt
1291
         */
1292
        private void ActionSemicolon(java.awt.event.ActionEvent evt) {
1293
                setDirty(true);
1294
        }
1295

    
1296
        /**
1297
         * This method runs when text Other has changed
1298
         * 
1299
         * @param evt
1300
         */
1301
        private void ActionTextOther(java.awt.event.ActionEvent evt) {
1302
                setDirty(true);
1303
        }
1304

    
1305
        /**
1306
         * This method runs when text Decimal has changed
1307
         * 
1308
         * @param evt
1309
         */
1310
        private void ActionDecimal(java.awt.event.FocusEvent evt) {
1311
                setDirty(true);
1312
        }
1313

    
1314
        /**
1315
         * This method runs when text Thousand has changed
1316
         * 
1317
         * @param evt
1318
         */
1319
        private void ActionThousand(java.awt.event.FocusEvent evt) {
1320
                setDirty(true);
1321
        }
1322

    
1323
        /**
1324
         * This method runs when text Text has changed
1325
         * 
1326
         * @param evt
1327
         */
1328
        private void ActionTextText(java.awt.event.FocusEvent evt) {
1329
                setDirty(true);
1330
        }
1331

    
1332
        /**
1333
         * This method runs when Field Name has changed
1334
         * 
1335
         * @param evt
1336
         */
1337
        private void KeyChangesFieldName(KeyEvent evt) {
1338
                //log.debug("#Key Pressed Field name# :" + this.selectedField);
1339
                int pos = this.selectedField;
1340
                updateFieldToModel(pos);
1341
                updateGUI();
1342
                setDirty(false);
1343
        }
1344

    
1345
        /**
1346
         * 
1347
         * @param evt
1348
         */
1349
        private void mainPanelGetFocus(java.awt.event.FocusEvent evt) {
1350
                jTableSource.setModel(getSourceData());
1351
        }
1352

    
1353
        /**
1354
         * This method runs when check Join Separators is selected or deselected
1355
         * 
1356
         * @param evt
1357
         */
1358
        private void ActionJoinSep(java.awt.event.ActionEvent evt) {
1359
                setDirty(true);
1360
        }
1361

    
1362
        /**
1363
         * This method runs when check fixed width is selected or deselected
1364
         * 
1365
         * @param evt
1366
         */
1367
        private void fixedWidthEnable(java.awt.event.ActionEvent evt) {
1368
                this.jTextFieldWidth.setEditable(true);
1369
                Component[] comps = this.jPanFieldSeparators.getComponents();
1370
                for (int i = 0; i < comps.length; i++) {
1371
                        comps[i].setEnabled(false);
1372
                }
1373
                this.jTextFieldWidth.requestFocus();
1374
                setDirty(true);
1375
        }
1376

    
1377
        /**
1378
         * This method runs when radio character delimiters is selected or
1379
         * deselected
1380
         * 
1381
         * @param evt
1382
         */
1383
        private void charDelimitedEnable(java.awt.event.ActionEvent evt) {
1384
                this.jTextFieldWidth.setEditable(false);
1385
                Component[] comps = this.jPanFieldSeparators.getComponents();
1386
                for (int i = 0; i < comps.length; i++) {
1387
                        comps[i].setEnabled(true);
1388
                }
1389
                setDirty(true);
1390
        }
1391

    
1392
        /**
1393
         * This method runs when radio Field Date is selected or deselected
1394
         * 
1395
         * @param evt
1396
         */
1397
        private void dateStateChanged(java.awt.event.ItemEvent evt) {
1398
                boolean enable = this.jRadioDate.isSelected();
1399
                this.jComboDate.setEnabled(enable);
1400
                if (enable) {
1401
                        this.jComboDate.requestFocus();
1402
                }
1403
                setDirty(true);
1404
        }
1405

    
1406
        /**
1407
         * This method runs when Testing button is pressed
1408
         * 
1409
         * @param evt
1410
         */
1411
        private void testNormalizer(java.awt.event.ActionEvent evt) {
1412
                /* Save elements */
1413
                if (isDirty()) {
1414
                        updateFieldToModel(jListFieldList.getSelectedIndex());
1415
                }
1416
                /* Normalize */
1417
                Object[][] data = this.model.normalizeSamples();
1418
                String[] nam = this.model.getNewFieldNames();
1419
                jTableResult.setModel(new DefaultTableModel(data, nam));
1420
        }
1421

    
1422
        /**
1423
         * This method runs when check OTHER TEXT is selected or deselected
1424
         * 
1425
         * @param evt
1426
         */
1427
        private void enableOtherText(java.awt.event.ActionEvent evt) {
1428
                this.jTextOther.setEditable(this.jChkOther.isSelected());
1429
                if (this.jChkOther.isSelected()) {
1430
                        jTextOther.requestFocus();
1431
                }
1432
                setDirty(true);
1433
        }
1434

    
1435
        /**
1436
         * This method runs when Normalization button is pressed
1437
         * 
1438
         * @param evt
1439
         */
1440
        private void runNormalizer(java.awt.event.ActionEvent evt) {
1441

    
1442
                /* Save the pattern */
1443
                if (isDirty()) {
1444
                        updateFieldToModel(this.selectedField);
1445
                }
1446
                /* Get the relate fields of the list */
1447
                if (!isFile) {
1448
                        String[] nam = null;
1449
                        Object[] names = jListOriginalFields.getSelectedValues();
1450

    
1451
                        /* select all fields */
1452
                        if (jListOriginalFields.getSelectedIndex() == 1) {
1453

    
1454
                                nam = this.model.getFieldNamesMainTable();
1455
                        }
1456
                        /* fields selected */
1457
                        if (jListOriginalFields.getSelectedIndex() != 0
1458
                                        && jListOriginalFields.getSelectedIndex() != 1) {
1459

    
1460
                                nam = new String[names.length];
1461
                                for (int i = 0; i < names.length; i++) {
1462
                                        nam[i] = (String) names[i];
1463
                                }
1464
                        }
1465
                        this.model.setNameRelateFields(nam);
1466
                }
1467
                /* RUN */
1468
                this.model.runModel(this);
1469

    
1470
        }
1471

    
1472
        /**
1473
         * Update the type
1474
         * 
1475
         * @param evt
1476
         */
1477
        private void updateStringType(java.awt.event.ActionEvent evt) {
1478
                updateSelectors();
1479
                setDirty(true);
1480
        }
1481

    
1482
        /**
1483
         * Update the type
1484
         * 
1485
         * @param evt
1486
         */
1487
        private void updateIntegerType(java.awt.event.ActionEvent evt) {
1488
                updateSelectors();
1489
                setDirty(true);
1490
        }
1491

    
1492
        /**
1493
         * Update the type
1494
         * 
1495
         * @param evt
1496
         */
1497
        private void updateDecimalType(java.awt.event.ActionEvent evt) {
1498
                updateSelectors();
1499
                setDirty(true);
1500
        }
1501

    
1502
        /**
1503
         * This method runs when UP button is pressed
1504
         * 
1505
         * @param evt
1506
         */
1507
        private void ActionButtonUp(java.awt.event.ActionEvent evt) {
1508
                //log.debug("#Up# Old selected field: " + this.selectedField);
1509
                int pos = this.selectedField;
1510
                updateFieldToModel(pos);
1511
                setDirty(false);
1512

    
1513
                this.model.fieldUp(pos);
1514
                DefaultListModel dlm = this.updateListModel();
1515
                jListFieldList.setModel(dlm);
1516
                if (pos > 0 && dlm.getSize() > 1) {
1517
                        this.selectedField = pos - 1;
1518
                        jListFieldList.setSelectedIndex(pos - 1);
1519
                } else {
1520
                        this.selectedField = pos;
1521
                        jListFieldList.setSelectedIndex(pos);
1522
                }
1523
        }
1524

    
1525
        /**
1526
         * This method runs when ADD button is pressed
1527
         * 
1528
         * @param evt
1529
         */
1530
        private void ActionButtonAddField(java.awt.event.ActionEvent evt) {
1531
                //log.debug("#Add# Old selected field: " + this.selectedField);
1532
                int pos = this.selectedField;
1533
                updateFieldToModel(pos);
1534
                setDirty(false);
1535

    
1536
                model.addField();
1537
                DefaultListModel dlm = this.updateListModel();
1538
                int siz = dlm.size();
1539
                this.selectedField = siz - 1;
1540
                jListFieldList.setModel(dlm);
1541
                jListFieldList.setSelectedIndex(siz - 1);
1542
                jTextOther.setEditable(false);
1543
        }
1544

    
1545
        /**
1546
         * This method runs when REMOVE button is pressed
1547
         * 
1548
         * @param evt
1549
         */
1550
        private void ActionButtonRemove(java.awt.event.ActionEvent evt) {
1551
                int siz = jListFieldList.getModel().getSize();
1552
                //log.debug("#Remove# Old selected field: " + this.selectedField);
1553
                int pos = this.selectedField;
1554
                if (siz > 0) {
1555
                        updateFieldToModel(pos);
1556
                        setDirty(false);
1557
                        model.deleteField(pos);
1558
                        DefaultListModel dlm = this.updateListModel();
1559
                        if (pos > 0) {
1560
                                this.selectedField = pos - 1;
1561
                                jListFieldList.setModel(dlm);
1562
                                jListFieldList.setSelectedIndex(pos - 1);
1563
                        } else {
1564
                                this.selectedField = pos;
1565
                                jListFieldList.setModel(dlm);
1566
                                jListFieldList.setSelectedIndex(pos);
1567
                        }
1568
                }
1569
        }
1570

    
1571
        /**
1572
         * This method runs when DOWN button is pressed
1573
         * 
1574
         * @param evt
1575
         */
1576
        private void ActionButtonDown(java.awt.event.ActionEvent evt) {
1577
                //log.debug("#Down# Ols selected field: " + this.selectedField);
1578
                int pos = this.selectedField;
1579
                updateFieldToModel(pos);
1580
                setDirty(false);
1581

    
1582
                model.fieldDown(pos);
1583
                DefaultListModel dlm = this.updateListModel();
1584
                jListFieldList.removeAll();
1585
                jListFieldList.setModel(dlm);
1586
                int can = dlm.getSize();
1587
                if (pos < can - 1 && can > 1) {
1588
                        this.selectedField = pos + 1;
1589
                        jListFieldList.setSelectedIndex(pos + 1);
1590
                } else {
1591
                        jListFieldList.setSelectedIndex(pos);
1592
                }
1593
        }
1594

    
1595
        /**
1596
         * Select alter table
1597
         * 
1598
         * @param evt
1599
         */
1600
        private void ActionAlterTable(java.awt.event.ActionEvent evt) {
1601
                this.jListOriginalFields.setEnabled(false);
1602
                model.setInNewTable(false);
1603

    
1604
        }
1605

    
1606
        /**
1607
         * Select new table
1608
         * 
1609
         * @param evt
1610
         */
1611
        private void ActionNewTable(java.awt.event.ActionEvent evt) {
1612
                if (!isFile) {
1613
                        this.jListOriginalFields.setEnabled(true);
1614
                }
1615
                jListOriginalFields.setSelectedIndex(0);
1616
                model.setInNewTable(true);
1617
        }
1618

    
1619
        /**
1620
         * When press the Load pattern button
1621
         * 
1622
         * @param evt
1623
         */
1624
        private void jButLoadActionPerformed(java.awt.event.ActionEvent evt) {
1625
                //log.debug("#Load# Selected field: " + this.selectedField);
1626
                /* update the model from the view */
1627
                updateFieldToModel(this.selectedField);
1628
                setDirty(false);
1629

    
1630
                /* load the model from xml file */
1631
                Patternnormalization pat = model.loadPatternXML();
1632

    
1633
                /* update the panel */
1634
                if (pat != null) {
1635
                        /* save pattern in the model */
1636
                        model.setPattern(pat);
1637

    
1638
                        DefaultListModel dlm = this.updateListModel();
1639
                        jListFieldList.setModel(dlm);
1640
                        jListFieldList.setSelectedIndex(0);
1641
                        jCheckFirstRow.setSelected(model.getFirstRows() != 0);
1642
                        if (jCheckFirstRow.isSelected()) {
1643
                                jTextNumberRows.setEditable(true);
1644
                                jTextNumberRows.setText(model.getFirstRows() + "");
1645
                                model.getSamplesFromFile(model.getFirstRows());
1646
                                jTableSource.setModel(getSourceData());
1647
                        }
1648
                        setDirty(false);
1649
                }
1650

    
1651
        }
1652

    
1653
        /**
1654
         * When change the selected element
1655
         * 
1656
         * @param evt
1657
         */
1658
        private void jListFieldListValueChanged(
1659
                        javax.swing.event.ListSelectionEvent evt) {
1660
                //log.debug("1. Fila seleccionada: " + this.selectedField);
1661
                /* Save the parameters in the model */
1662
                boolean dirty = isDirty();
1663
                if (dirty) {
1664
                        updateFieldToModel(this.selectedField);
1665
                }                
1666
                if (!evt.getValueIsAdjusting()) {
1667
                        int pos = this.selectedField;
1668
                        updateFieldToGUI(pos);
1669
                        jListFieldList.setSelectedIndex(pos);
1670
                }
1671
                setDirty(false);
1672
        }
1673

    
1674
        /**
1675
         * Close the panel
1676
         * 
1677
         * @param evt
1678
         */
1679
        private void ActionCancel(java.awt.event.ActionEvent evt) {
1680
                IWindow[] iws = PluginServices.getMDIManager().getAllWindows();
1681
                for (int i = 0; i < iws.length; i++) {
1682
                        if (iws[i] instanceof NormalizationPanel) {
1683
                                PluginServices.getMDIManager().closeWindow(iws[i]);
1684
                        }
1685
                }
1686
                model.initPattern();
1687
                jTextAreaConsole.removeAll();
1688
        }
1689

    
1690
        /**
1691
         * When press the Save pattern button
1692
         * 
1693
         * @param evt
1694
         */
1695
        private void jButSaveActionPerformed(java.awt.event.ActionEvent evt) {
1696
                model.setFirstRows(Integer.parseInt(jTextNumberRows.getText()));
1697
                int pos = this.selectedField;
1698
                updateFieldToModel(pos);
1699
                setDirty(false);
1700
                /* save the pattern */
1701
                model.savePatternXML();
1702
        }
1703

    
1704
        /**
1705
         * Method to update GUI values with the selected column
1706
         * 
1707
         * @param id
1708
         *            column number
1709
         */
1710
        private void updateFieldToGUI(int id) {
1711

    
1712
                Element elem = this.model.getElement(id);
1713

    
1714
                /* name */
1715
                this.jTextFieldName.setText(elem.getFieldname());
1716

    
1717
                /* don't import */
1718
                this.jChkDontImport.setSelected(!elem.getImportfield());
1719

    
1720
                /* Update type */
1721
                Fieldtype type = elem.getFieldtype();
1722

    
1723
                if (type == null) {
1724
                        type = new Fieldtype();
1725
                        type.setStringvalue(new Stringvalue());
1726
                        elem.setFieldtype(type);
1727
                }
1728

    
1729
                boolean flag = false;
1730
                if (type.getDatevalue() != null) {
1731
                        jRadioDate.setSelected(true);
1732
                        String formato = type.getDatevalue().getDatevalueformat();
1733
                        DefaultComboBoxModel model = (DefaultComboBoxModel) jComboDate
1734
                                        .getModel();
1735
                        for (int i = 0; i < model.getSize(); i++) {
1736
                                String nameformato = (String) model.getElementAt(i);
1737
                                if (formato.compareToIgnoreCase(nameformato) == 0) {
1738
                                        jComboDate.setSelectedIndex(i);
1739
                                        flag = true;
1740
                                }
1741
                        }
1742
                        if (!flag) {
1743
                                model.addElement(formato);
1744
                                jComboDate.setModel(model);
1745
                                jComboDate.setSelectedItem(formato);
1746
                        }
1747
                } else if (type.getStringvalue() != null) {
1748
                        jRadioString.setSelected(true);
1749
                } else if (type.getIntegervalue() != null) {
1750
                        jRadioInteger.setSelected(true);
1751
                } else if (type.getDecimalvalue() != null) {
1752
                        jRadioDecimal.setSelected(true);
1753
                }
1754

    
1755
                /* Update field separator */
1756
                Fieldseparator seps = elem.getFieldseparator();
1757
                if (seps == null) {
1758
                        model.getDefaultFieldseparators();
1759
                }
1760

    
1761
                this.jTextFieldWidth.setText(Integer.toString(elem.getFieldwidth()));
1762
                boolean isFixedWidth = elem.getFieldwidth() > 0;
1763

    
1764
                this.jRadioFixed.setSelected(isFixedWidth);
1765
                this.jRadioCharacter.setSelected(!isFixedWidth);
1766

    
1767
                if (isFixedWidth) {
1768
                        this.fixedWidthEnable(null);
1769
                } else {
1770
                        this.charDelimitedEnable(null);
1771
                }
1772

    
1773
                this.jChkJoin.setSelected(seps.getJoinsep());
1774

    
1775
                this.jChkTab.setSelected(seps.getTabsep());
1776

    
1777
                this.jChkSpace.setSelected(seps.getSpacesep());
1778

    
1779
                this.jChkColon.setSelected(seps.getColonsep());
1780

    
1781
                this.jChkSemicolon.setSelected(seps.getSemicolonsep());
1782

    
1783
                boolean other = seps.getOthersep() != null;
1784
                this.jChkOther.setSelected(other);
1785

    
1786
                if (other) {
1787
                        this.jTextOther.setText(seps.getOthersep());
1788
                } else {
1789
                        this.jTextOther.setEditable(false);
1790
                        this.jTextOther.setText(null);
1791
                }
1792

    
1793
                /* Update field separator */
1794

    
1795
                Infieldseparators insep = elem.getInfieldseparators();
1796
                this.jTextDecimal.setText(insep.getDecimalseparator().trim());
1797
                this.jTextThousand.setText(insep.getThousandseparator().trim());
1798
                this.jTextTextDelimiter.setText(insep.getTextseparator().trim());
1799

    
1800
                updateSelectors();
1801

    
1802
                setDirty(false);
1803
        }
1804

    
1805
        /**
1806
         * Update the field values in the model
1807
         */
1808
        private void updateFieldToModel(int pos) {
1809

    
1810
                Element elem = this.model.getElement(pos);
1811

    
1812
                /* name */
1813
                elem.setFieldname(this.jTextFieldName.getText());
1814

    
1815
                /* don't import */
1816
                elem.setImportfield(!this.jChkDontImport.isSelected());
1817

    
1818
                /* Update type */
1819
                Fieldtype type = new Fieldtype();
1820

    
1821
                if (jRadioString.isSelected()) {
1822
                        Stringvalue strval = new Stringvalue();
1823
                        strval.setStringvaluewidth(50);
1824
                        type.setStringvalue(strval);
1825
                } else if (jRadioInteger.isSelected()) {
1826
                        Integervalue intval = new Integervalue();
1827
                        intval.setIntegervaluewidth(25);
1828
                        type.setIntegervalue(intval);
1829
                } else if (jRadioDecimal.isSelected()) {
1830
                        Decimalvalue dec = new Decimalvalue();
1831
                        /* DECIMALES = 10 */
1832
                        dec.setDecimalvaluedec(10);
1833
                        dec.setDecimalvalueint(25);
1834
                        type.setDecimalvalue(dec);
1835
                } else {
1836
                        Datevalue date = new Datevalue();
1837
                        String form = jComboDate.getSelectedItem().toString();
1838
                        date.setDatevalueformat(form);
1839
                        type.setDatevalue(date);
1840
                }
1841
                elem.setFieldtype(type);
1842

    
1843
                /* Update field separator */
1844
                Fieldseparator seps = elem.getFieldseparator();
1845

    
1846
                if (elem.getFieldseparator() == null) {
1847
                        seps = new Fieldseparator();
1848
                }
1849

    
1850
                boolean isFixedWidth = this.jRadioFixed.isSelected();
1851
                int val;
1852
                if (isFixedWidth) {
1853
                        try {
1854
                                val = Integer.parseInt(jTextFieldWidth.getText());
1855
                                elem.setFieldwidth(val);
1856
                        } catch (Exception e) {
1857
                                jTextFieldWidth.requestFocus();
1858
                        }
1859

    
1860
                } else {
1861
                        elem.setFieldwidth(0);
1862
                }
1863

    
1864
                seps.setJoinsep(this.jChkJoin.isSelected());
1865
                seps.setSpacesep(this.jChkSpace.isSelected());
1866
                seps.setColonsep(this.jChkColon.isSelected());
1867
                seps.setSemicolonsep(this.jChkSemicolon.isSelected());
1868
                seps.setTabsep(this.jChkTab.isSelected());
1869

    
1870
                if (jChkOther.isSelected() && jTextOther.getText().length() == 1) {
1871
                        seps.setOthersep(jTextOther.getText().trim());
1872
                } else {
1873
                        seps.setOthersep(null);
1874
                }
1875

    
1876
                /* Update In-field separator */
1877
                Infieldseparators inseps = elem.getInfieldseparators();
1878

    
1879
                if (elem.getInfieldseparators() == null) {
1880
                        inseps = new Infieldseparators();
1881
                }
1882

    
1883
                inseps.setThousandseparator(this.jTextThousand.getText().trim());
1884
                inseps.setDecimalseparator(this.jTextDecimal.getText().trim());
1885
                inseps.setTextseparator(this.jTextTextDelimiter.getText().trim());
1886

    
1887
        }
1888

    
1889
        /**
1890
         * Gets the strings sample for the table of samples
1891
         * 
1892
         * @return table model
1893
         */
1894
        private DefaultTableModel getSourceData() {
1895
                if (this.model == null) {
1896
                        return null;
1897
                }
1898
                String[] samples = null;
1899
                if (isFile) {
1900
                        samples = this.model.getSamplesFile();
1901
                } else {
1902
                        samples = this.model.getSamplesTable();
1903
                }
1904
                int size = samples.length;
1905

    
1906
                Object[][] data = new Object[size][1];
1907

    
1908
                for (int i = 0; i < size; i++) {
1909
                        data[i][0] = samples[i];
1910
                }
1911
                DefaultTableModel dtm1 = null;
1912
                if (!isFile) {
1913
                        dtm1 = new DefaultTableModel(data, new String[] { this.model
1914
                                        .getFieldToNormalize() }) {
1915

    
1916
                                private static final long serialVersionUID = -7429493540158414622L;
1917

    
1918
                                public boolean isCellEditable(int rowIndex, int columnIndex) {
1919
                                        return false;
1920
                                }
1921
                        };
1922
                } else {
1923
                        Object[] names = { model.getFileName() };
1924
                        dtm1 = new DefaultTableModel(data, names);
1925
                }
1926

    
1927
                return dtm1;
1928
        }
1929

    
1930
        /**
1931
         * Update GUI elements with model info
1932
         */
1933
        private void updateGUI() {
1934

    
1935
                /* Source Samples values */
1936
                jTableSource.setModel(getSourceData());
1937

    
1938
                /* Fields List */
1939
                jListFieldList.setModel(this.updateListModel());
1940
                jListFieldList.setSelectedIndex(0);
1941

    
1942
                /* Fields List in Original Table */
1943
                if (!isFile) {
1944
                        DefaultListModel dlmot = model.getAllOriginalFields();
1945
                        jListOriginalFields.setModel(dlmot);
1946
                        jListOriginalFields.setSelectedIndex(0);
1947
                }
1948
                /* Disable any controls */
1949
                if (isFile) {
1950
                        jTableSource.setName(model.getFileName());
1951
                        jCheckFirstRow.setEnabled(true);
1952
                        jLabelNumberRows.setEnabled(true);
1953
                        jCheckFirstRow.setSelected(model.getFirstRows() != 0);
1954
                        jTextNumberRows.setText(model.getFirstRows() + "");
1955
                        jRadioAlterTable.setEnabled(false);
1956
                        jListOriginalFields.removeAll();
1957
                        jRadioNewTable.setSelected(true);
1958
                        model.setInNewTable(true);
1959
                        jListOriginalFields.setEnabled(false);
1960
                }
1961
        }
1962

    
1963
        /**
1964
         * 
1965
         * @author jsanz
1966
         * 
1967
         */
1968
        class IntVerifier extends InputVerifier {
1969

    
1970
                public boolean verify(JComponent input) {
1971
                        try {
1972
                                Integer.parseInt(((JTextField) input).getText());
1973
                                return true;
1974
                        } catch (NumberFormatException e) {
1975
                                log.error("Parsing the value");
1976
                                return false;
1977
                        }
1978
                }
1979
        }
1980

    
1981
        /**
1982
         * 
1983
         * @author jsanz
1984
         * 
1985
         */
1986
        class CharVerifier extends InputVerifier {
1987

    
1988
                public boolean verify(JComponent input) {
1989
                        String text = ((JTextField) input).getText();
1990
                        if (text != null && text.length() == 1) {
1991
                                return true;
1992
                        } else {
1993
                                return false;
1994
                        }
1995
                }
1996
        }
1997

    
1998
        /**
1999
         * Update the in separators
2000
         * 
2001
         */
2002
        private void updateSelectors() {
2003
                boolean isDecimal = false;
2004
                boolean isThousand = false;
2005
                boolean isText = false;
2006

    
2007
                if (this.jRadioString.isSelected()) {
2008
                        isText = true;
2009
                } else if (this.jRadioInteger.isSelected()) {
2010
                        isThousand = true;
2011
                } else if (this.jRadioDecimal.isSelected()) {
2012
                        isThousand = true;
2013
                        isDecimal = true;
2014
                }
2015

    
2016
                this.jTextDecimal.setEditable(isDecimal);
2017
                this.jTextThousand.setEditable(isThousand);
2018
                this.jTextTextDelimiter.setEditable(isText);
2019
        }
2020

    
2021
        /**
2022
         * This method updates the labels
2023
         */
2024
        private void setMessages() {
2025

    
2026
                if (this.ps == null)
2027
                        return;
2028

    
2029
                this.setName(ps.getText("normtitle"));
2030
                jPanSource.setBorder(BorderFactory.createTitledBorder(ps
2031
                                .getText("normsource")));
2032
                jCheckFirstRow.setText(ps.getText("normfirstrows"));
2033
                jLabelNumberRows.setText(ps.getText("normfirstnumberrows"));
2034

    
2035
                jPanFieldList.setBorder(BorderFactory.createTitledBorder(ps
2036
                                .getText("normfields")));
2037

    
2038
                jPanFieldSettings.setBorder(BorderFactory.createTitledBorder(ps
2039
                                .getText("normfieldsettings")));
2040
                jLabFieldName.setText(ps.getText("normfieldname"));
2041
                jChkDontImport.setText(ps.getText("normdontimport"));
2042

    
2043
                jPanFieldType.setBorder(BorderFactory.createTitledBorder(ps
2044
                                .getText("normfieldtype")));
2045
                jRadioString.setText(ps.getText("normfieldstring"));
2046
                jRadioInteger.setText(ps.getText("normfieldinteger"));
2047
                jRadioDecimal.setText(ps.getText("normfielddecimal"));
2048
                jRadioDate.setText(ps.getText("normfielddate"));
2049

    
2050
                jPanSeparators.setBorder(BorderFactory.createTitledBorder(ps
2051
                                .getText("normdelimetersnext")));
2052
                jRadioCharacter.setText(ps.getText("normcharacter"));
2053
                jRadioFixed.setText(ps.getText("normfixedwidth"));
2054

    
2055
                jPanFieldSeparators.setBorder(BorderFactory.createTitledBorder(ps
2056
                                .getText("normfieldseparators")));
2057
                jChkTab.setText(ps.getText("normtab"));
2058
                jChkSpace.setText(ps.getText("normspace"));
2059
                jChkColon.setText(ps.getText("normcolon"));
2060
                jChkSemicolon.setText(ps.getText("normsemicolon"));
2061
                jChkOther.setText(ps.getText("normother"));
2062
                jChkJoin.setText(ps.getText("normjoin"));
2063

    
2064
                jPanInField.setBorder(BorderFactory.createTitledBorder(ps
2065
                                .getText("norminfieldseparators")));
2066
                jLabDecimal.setText(ps.getText("normdecimal"));
2067
                jLabThousand.setText(ps.getText("normthousand"));
2068
                jLabTextDel.setText(ps.getText("normtextdelimiter"));
2069

    
2070
                jButTest.setText(ps.getText("normtest"));
2071

    
2072
                jPanSampleOutput.setBorder(BorderFactory.createTitledBorder(ps
2073
                                .getText("normsampleout")));
2074

    
2075
                jPanOutputOpt.setBorder(BorderFactory.createTitledBorder(ps
2076
                                .getText("normoutputopt")));
2077
                jRadioAlterTable.setText(ps.getText("normaltertable"));
2078
                jRadioNewTable.setText(ps.getText("normnewtable"));
2079
                jLabelSelFields.setText(ps.getText("normjoinfield"));
2080

    
2081
                jPanConsole.setBorder(BorderFactory.createTitledBorder(ps
2082
                                .getText("normconsole")));
2083

    
2084
                jButLoad.setText(ps.getText("normload"));
2085
                jButSave.setText(ps.getText("normsave"));
2086
                jButRun.setText(ps.getText("normrun"));
2087
                jButCancel.setText(ps.getText("normcancel"));
2088
        }
2089

    
2090
        /**
2091
         * this method says if the panel has changed any parameter
2092
         * 
2093
         * @return the dirty
2094
         */
2095
        private boolean isDirty() {
2096
                return dirty;
2097
        }
2098

    
2099
        /**
2100
         * 
2101
         * When the panel has changed any parameter (true)
2102
         * 
2103
         * @param dirty
2104
         *            flag
2105
         */
2106
        private void setDirty(boolean dirty) {
2107
                this.dirty = dirty;
2108
        }
2109

    
2110
        /**
2111
         * This method updates the images
2112
         */
2113
        private void setImages() {
2114

    
2115
                if (this.ps == null)
2116
                        return;
2117

    
2118
                String bDir = ps.getClassLoader().getBaseDir();
2119

    
2120
                jButUpField.setIcon(new ImageIcon(bDir + File.separator + "images"
2121
                                + File.separator + "icons16" + File.separator + "go-up.png"));
2122
                jButDownField.setIcon(new ImageIcon(bDir + File.separator + "images"
2123
                                + File.separator + "icons16" + File.separator + "go-down.png"));
2124
                jButAddField
2125
                                .setIcon(new ImageIcon(bDir + File.separator + "images"
2126
                                                + File.separator + "icons16" + File.separator
2127
                                                + "list-add.png"));
2128
                jButRemoveField.setIcon(new ImageIcon(bDir + File.separator + "images"
2129
                                + File.separator + "icons16" + File.separator
2130
                                + "list-remove.png"));
2131
        }
2132

    
2133
        /**
2134
         * This method parses the info
2135
         * 
2136
         * @param info
2137
         * @return
2138
         */
2139
        private String parseInfo(String info) {
2140
                String value = "";
2141
                String temp[] = info.split("\\.");
2142

    
2143
                if (temp[0].compareToIgnoreCase("INFO") == 0) {
2144
                        value = "INFO: " + PluginServices.getText(null, temp[1]);
2145
                } else {
2146
                        value = "ERROR: " + PluginServices.getText(null, temp[1]);
2147
                }
2148

    
2149
                if (temp.length == 3) {
2150
                        value = value + " " + temp[2];
2151
                }
2152

    
2153
                return value + "\n";
2154
        }
2155

    
2156
        /**
2157
         * getWindowprofile
2158
         * 
2159
         * @return
2160
         */
2161
        public Object getWindowProfile() {
2162
                return null;
2163
        }
2164

    
2165
        /**
2166
         * This method updates the model of the names FieldList
2167
         * 
2168
         * @return list model
2169
         */
2170
        private DefaultListModel updateListModel() {
2171

    
2172
                DefaultListModel dlmodel = new DefaultListModel();
2173
                Element[] adr = model.getPattern().getArrayElements();
2174
                String name = "";
2175
                for (int i = 0; i < adr.length; i++) {
2176
                        name = adr[i].getFieldname();
2177
                        dlmodel.add(i, name);
2178
                }
2179
                return dlmodel;
2180
        }
2181

    
2182
}