Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.exportto / org.gvsig.exportto.swing / org.gvsig.exportto.swing.impl / src / main / java / org / gvsig / export / swing / impl / panels / SelectAttributesPanel.java @ 47524

History | View | Annotate | Download (28.1 KB)

1
package org.gvsig.export.swing.impl.panels;
2

    
3
import java.awt.Component;
4
import java.awt.Font;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.awt.event.KeyAdapter;
8
import java.awt.event.KeyEvent;
9
import java.awt.event.MouseEvent;
10
import java.net.URL;
11
import java.util.ArrayList;
12
import java.util.Comparator;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Objects;
16
import java.util.Timer;
17
import java.util.TimerTask;
18
import javax.swing.DefaultCellEditor;
19
import javax.swing.DefaultComboBoxModel;
20
import javax.swing.DefaultListCellRenderer;
21
import javax.swing.ImageIcon;
22
import javax.swing.JButton;
23
import javax.swing.JCheckBox;
24
import javax.swing.JComboBox;
25
import javax.swing.JComponent;
26
import javax.swing.JLabel;
27
import javax.swing.JList;
28
import javax.swing.JOptionPane;
29
import javax.swing.JTable;
30
import javax.swing.table.AbstractTableModel;
31
import javax.swing.table.JTableHeader;
32
import javax.swing.table.TableCellRenderer;
33
import javax.swing.table.TableColumnModel;
34
import javax.swing.table.TableModel;
35
import javax.swing.text.JTextComponent;
36
import org.apache.commons.io.FilenameUtils;
37
import org.apache.commons.lang.StringUtils;
38
import org.gvsig.export.ExportAttributes;
39
import org.gvsig.export.ExportAttributes.ExportAttribute;
40
import org.gvsig.export.ExportParameters;
41
import org.gvsig.export.swing.JExportProcessPanel;
42
import org.gvsig.export.swing.spi.ExportPanel;
43
import org.gvsig.export.swing.spi.ExportPanelValidationException;
44
import org.gvsig.export.swing.spi.ExportPanelsManager;
45
import org.gvsig.fmap.dal.DataTypes;
46
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
47
import org.gvsig.fmap.dal.feature.FeatureType;
48
import org.gvsig.tools.ToolsLocator;
49
import org.gvsig.tools.dataTypes.DataType;
50
import org.gvsig.tools.dataTypes.DataTypesManager;
51
import org.gvsig.tools.i18n.I18nManager;
52
import org.gvsig.tools.namestranslator.NamesTranslator;
53
import org.gvsig.tools.swing.api.FilteredTableModel;
54
import org.gvsig.tools.swing.api.ListElement;
55
import org.gvsig.tools.swing.api.MessageBarController;
56
import org.gvsig.tools.swing.api.ToolsSwingLocator;
57
import org.gvsig.tools.swing.api.ToolsSwingManager;
58
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
59
import org.gvsig.tools.swing.icontheme.IconTheme;
60
import org.slf4j.Logger;
61
import org.slf4j.LoggerFactory;
62

    
63
/**
64
 *
65
 * @author jjdelcerro
66
 */
67
@SuppressWarnings("UseSpecificCatch")
68
public class SelectAttributesPanel
69
        extends SelectAttributesPanelView
70
        implements ExportPanel {
71

    
72
    private static final Logger LOGGER = LoggerFactory.getLogger(SelectAttributesPanel.class);
73

    
74
    private static final int COLUMN_FIELD_EXPORT = 0;
75
    private static final int COLUMN_FIELD_TYPE = 1;
76
    private static final int COLUMN_FIELD_SIZE = 2;
77
    private static final int COLUMN_FIELD_ORIGIN = 3;
78
    private static final int COLUMN_FIELD_CALCULATED = 4;
79
    private static final int COLUMN_FIELD_NAME = 5;
80
    private static final int COLUMN_FIELD_NEW_NAME = 6;
81

    
82
    private static final int COLUMN_FIELD_COUNT = 7;
83

    
84
    private static final int ORIGIN_REAL = 0;
85
    private static final int ORIGIN_QUERY_CALCULATED = 1;
86
    private static final int ORIGIN_TABLE_CALCULATED = 2;
87
    private MessageBarController messageController;
88

    
89
    private static class AttributesTableModel
90
            extends AbstractTableModel
91
            implements TableModel {
92

    
93
        final private ExportAttributes attributes;
94
        private final String[] columnNames = new String[COLUMN_FIELD_COUNT];
95
        private final Class[] columnClases = new Class[COLUMN_FIELD_COUNT];
96
        private final String[] columnToolTips = new String[COLUMN_FIELD_COUNT];
97
        private final DataTypesManager dataManager;
98
        private final SelectAttributesPanel panel;
99

    
100
        public AttributesTableModel(ExportAttributes attributes, SelectAttributesPanel panel) {
101
            this.panel = panel;
102
            this.attributes = attributes;
103
            this.dataManager = ToolsLocator.getDataTypesManager();
104
            I18nManager i18nManager = ToolsLocator.getI18nManager();
105
            columnNames[COLUMN_FIELD_NAME] = i18nManager.getTranslation("_name");
106
            columnNames[COLUMN_FIELD_NEW_NAME] = i18nManager.getTranslation("_New_name");
107
            columnNames[COLUMN_FIELD_ORIGIN] = i18nManager.getTranslation("_Origin");
108
            columnNames[COLUMN_FIELD_TYPE] = i18nManager.getTranslation("_type");
109
            columnNames[COLUMN_FIELD_SIZE] = i18nManager.getTranslation("_Size");
110
            columnNames[COLUMN_FIELD_CALCULATED] = i18nManager.getTranslation("_Virtual");
111
            columnNames[COLUMN_FIELD_EXPORT] = "";
112

    
113
            columnClases[COLUMN_FIELD_NAME] = String.class;
114
            columnClases[COLUMN_FIELD_NEW_NAME] = String.class;
115
            columnClases[COLUMN_FIELD_ORIGIN] = String.class;
116
            columnClases[COLUMN_FIELD_TYPE] = String.class;
117
            columnClases[COLUMN_FIELD_SIZE] = Integer.class;
118
            columnClases[COLUMN_FIELD_EXPORT] = Boolean.class;
119
            columnClases[COLUMN_FIELD_CALCULATED] = Boolean.class;
120
            
121
            columnToolTips[COLUMN_FIELD_NAME] = i18nManager.getTranslation("_Actual_field_name");
122
            columnToolTips[COLUMN_FIELD_NEW_NAME] = i18nManager.getTranslation("_New_field_name_in_the_export");
123
            columnToolTips[COLUMN_FIELD_ORIGIN] = i18nManager.getTranslation("_Origin");
124
            columnToolTips[COLUMN_FIELD_TYPE] = i18nManager.getTranslation("_Attribute_descriptor_type");
125
            columnToolTips[COLUMN_FIELD_SIZE] = i18nManager.getTranslation("_Field_size");
126
            columnToolTips[COLUMN_FIELD_CALCULATED] = i18nManager.getTranslation("_Export_attribute_as_an_expression_or_as_a_real_field");
127
            columnToolTips[COLUMN_FIELD_EXPORT] = i18nManager.getTranslation("_Select_if_field_has_to_be_exported");
128
        }
129
        
130
        public String getColumnToolTip(int column) {
131
            return columnToolTips[column];
132
        }
133

    
134
        @Override
135
        public int getRowCount() {
136
            return this.attributes.size();
137
        }
138

    
139
        @Override
140
        public int getColumnCount() {
141
            return COLUMN_FIELD_COUNT;
142
        }
143

    
144
        @Override
145
        public String getColumnName(int columnIndex) {
146
            return this.columnNames[columnIndex];
147
        }
148

    
149
        @Override
150
        public Class<?> getColumnClass(int columnIndex) {
151
            return this.columnClases[columnIndex];
152
        }
153

    
154
        @Override
155
        public boolean isCellEditable(int rowIndex, int columnIndex) {
156
            switch (columnIndex) {
157
                case COLUMN_FIELD_NAME:
158
                    return false;
159
                case COLUMN_FIELD_ORIGIN:
160
                    return false;
161
                case COLUMN_FIELD_CALCULATED: {
162
                    ExportAttribute attr = this.attributes.get(rowIndex);
163
                    if (!attr.getDescriptor().isComputed()) {
164
                        return false;
165
                    }
166
                    DataType dataType = attr.getDescriptor().getDataType();
167
                    if( dataType.getType() == DataTypes.GEOMETRY ) {
168
                        return true;
169
                    }
170
                    if (dataType.isContainer()
171
                            || dataType.isObject()
172
                            || dataType.isDynObject()) {
173
                        return false;
174
                    }
175
                    return true;
176
                }
177
                default:
178
                    return true;
179
            }
180
        }
181

    
182
        @Override
183
        public Object getValueAt(int rowIndex, int columnIndex) {
184
            ExportAttribute attr = this.attributes.get(rowIndex);
185
            switch (columnIndex) {
186
                case COLUMN_FIELD_NAME:
187
                    return attr.getName();
188
                case COLUMN_FIELD_NEW_NAME:
189
                    return attr.getNewName();
190
                case COLUMN_FIELD_ORIGIN:
191
                    if (attr.getDescriptor().isComputed()) {
192
                        if (attr.isFromQuery()){
193
                            return ORIGIN_QUERY_CALCULATED;
194
                        } else {
195
                            return ORIGIN_TABLE_CALCULATED;
196
                        }
197
                    } else {
198
                        return ORIGIN_REAL;
199
                    }
200
                case COLUMN_FIELD_TYPE:
201
                    try {
202
                        return dataManager.getTypeName(attr.getNewDataType());
203
                    } catch (Exception ex) {
204
                        return dataManager.getTypeName(attr.getDataType());
205
                    }
206
                case COLUMN_FIELD_SIZE:
207
                    return attr.getSize();
208
                case COLUMN_FIELD_EXPORT:
209
                    return attr.isExported();
210
                case COLUMN_FIELD_CALCULATED:
211
                    return attr.isComputed();
212
                default:
213
                    return null;
214
            }
215
        }
216

    
217
        @Override
218
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
219
            ExportAttribute attr = this.attributes.get(rowIndex);
220
            switch (columnIndex) {
221
                case COLUMN_FIELD_NAME:
222
                    break;
223
                case COLUMN_FIELD_NEW_NAME:
224
                    int indexChanged = attr.setNewName(Objects.toString(aValue, attr.getName()));
225
                    NamesTranslator translator = this.attributes.getNamesTranslator();
226
                    I18nManager i18 = ToolsLocator.getI18nManager();
227
                    if (!StringUtils.equalsIgnoreCase(Objects.toString(aValue, attr.getName()),
228
                            translator.getTranslation(attr.getName())))  {
229
                        StringBuilder changedLog = new StringBuilder();
230
                        changedLog.append("'");
231
                        changedLog.append(Objects.toString(aValue, attr.getName()));
232
                        changedLog.append("' ");
233
                        changedLog.append(i18.getTranslation("_field_name_has_been_fixed_to"));
234
                        changedLog.append(" '");
235
                        changedLog.append(translator.getTranslation(attr.getName()));
236
                        changedLog.append("'");
237
                        panel.setMessage(changedLog.toString());
238

    
239
                    }
240
                    if (indexChanged != -1) {
241
                        String fieldSource = translator.getSource(indexChanged);
242
                        String fieldTarget = translator.getTranslation(indexChanged);
243
                        StringBuilder changedLog = new StringBuilder();
244
                        changedLog.append("'");
245
                        changedLog.append(fieldSource);
246
                        changedLog.append("' ");
247
                        changedLog.append(i18.getTranslation("_has_been_changed_to_avoid_duplicates_for"));
248
                        changedLog.append(" '");
249
                        changedLog.append(fieldTarget);
250
                        changedLog.append("'");
251
                        panel.setMessage(changedLog.toString());
252

    
253
                    }
254

    
255
                    break;
256

    
257
                case COLUMN_FIELD_TYPE:
258
                    attr.setNewType(dataManager.getType(Objects.toString(aValue)));
259
                    break;
260
                case COLUMN_FIELD_SIZE:
261
                    try {
262
                    attr.setSize(Integer.parseInt(Objects.toString(aValue)));
263
                } catch (Exception ex) {
264
                    LOGGER.warn("Not been able to set size value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
265
                }
266
                break;
267
                case COLUMN_FIELD_EXPORT:
268
                    try {
269
                    attr.setExported((boolean) dataManager.get(DataTypes.BOOLEAN).coerce(aValue));
270
                } catch (Exception ex) {
271
                    LOGGER.warn("Not been able to set exported value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
272
                }
273
                break;
274
                case COLUMN_FIELD_CALCULATED:
275
                    try {
276
                    attr.setComputed((boolean) dataManager.get(DataTypes.BOOLEAN).coerce(aValue));
277
                } catch (Exception ex) {
278
                    LOGGER.warn("Not been able to set calculated value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
279
                }
280
                break;
281
                default:
282
                    break;
283
            }
284
            this.fireTableCellUpdated(rowIndex, columnIndex);
285
        }
286
    }
287

    
288
    private static class TableFilterController {
289

    
290
        private final JTable jtable;
291
        private final JTextComponent jtext;
292
        private final JButton btnFilter;
293
        private final int filterColumn;
294

    
295
        private FilteredTableModel tableModel;
296

    
297
        public TableFilterController(JTable jtable, JTextComponent jtext, JButton btnFilter, int filterColumn) {
298
            this.jtable = jtable;
299
            this.filterColumn = filterColumn;
300
            this.btnFilter = btnFilter;
301
            this.jtext = jtext;
302
            this.tableModel = null;
303
            ToolsSwingLocator.getToolsSwingManager().setDefaultPopupMenu(jtext);
304
            ToolsSwingLocator.getToolsSwingManager().addClearButton(jtext, new ActionListener() {
305
                @Override
306
                public void actionPerformed(ActionEvent e) {
307
                    if (tableModel != null) {
308
                        tableModel.setFilter(null);
309
                        jtext.setText("");
310
                    }
311
                }
312
            });
313
            this.jtext.addKeyListener(new KeyAdapter() {
314
                @Override
315
                public void keyPressed(KeyEvent e) {
316
                    if (e.getKeyChar() == '\n') {
317
                        if (tableModel != null) {
318
                            tableModel.setFilter(jtext.getText());
319
                        }
320
                    }
321
                }
322
            });
323
            this.btnFilter.addActionListener(new ActionListener() {
324
                @Override
325
                public void actionPerformed(ActionEvent e) {
326
                    if (tableModel != null) {
327
                        tableModel.setFilter(jtext.getText());
328
                    }
329
                }
330
            });
331
        }
332

    
333
        public void setModel(TableModel tableModel) {
334
            this.tableModel = ToolsSwingLocator.getToolsSwingManager().createFilteredTableModel(
335
                    tableModel,
336
                    this.filterColumn
337
            );
338
            this.jtable.setModel(this.tableModel);
339
        }
340
    }
341

    
342
    private class DataTypeCellRenderer
343
            extends JLabel
344
            implements TableCellRenderer {
345

    
346
        public DataTypeCellRenderer() {
347
        }
348

    
349
        @Override
350
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
351
            if (value != null) {
352
                String name = (String) table.getModel().getValueAt(row, COLUMN_FIELD_NAME);
353
                this.setText(value.toString());
354
                Font f = this.getFont();
355
                if (isOriginalType(row, value.toString())) {
356
                    this.setFont(f.deriveFont(f.getStyle() & ~Font.BOLD));
357
                } else {
358
                    this.setFont(f.deriveFont(f.getStyle() | Font.BOLD));
359
                }
360
            } else {
361
                this.setText("");
362
            }
363
            return this;
364
        }
365
    }
366

    
367
    private class OriginCellRenderer
368
            extends JLabel
369
            implements TableCellRenderer {
370

    
371
        public OriginCellRenderer() {
372
        }
373

    
374
        @Override
375
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
376
            if (column == COLUMN_FIELD_ORIGIN) {
377
                int origin = (int) table.getModel().getValueAt(row, COLUMN_FIELD_ORIGIN);
378
                IconTheme iconManager = ToolsSwingLocator.getIconThemeManager().getDefault();
379
                I18nManager i18Manager = ToolsLocator.getI18nManager();
380
                this.setHorizontalAlignment(JLabel.CENTER);
381
                switch (origin) {
382
                    case ORIGIN_QUERY_CALCULATED:
383
                        this.setToolTipText(i18Manager.getTranslation("_Query_calculated_field"));
384
                        this.setIcon((iconManager.get("featurestore-query-calculated-column")));
385
                        break;
386
                    case ORIGIN_TABLE_CALCULATED:
387
                        this.setToolTipText(i18Manager.getTranslation("_Table_calculated_field"));
388
                        this.setIcon((iconManager.get("featurestore-calculated-column")));
389
                        break;
390
                    case ORIGIN_REAL:
391
                        this.setToolTipText(i18Manager.getTranslation("_Real_field"));
392
                        this.setIcon((iconManager.get("featurestore-column")));
393
                        break;
394
                    default:
395
                        this.setText(value.toString());
396
                        break;
397
                }
398
                return this;
399
            }
400
            return this;
401
        }
402
    }
403

    
404
    private class DataTypeCellEditor extends DefaultCellEditor {
405

    
406
        private int currentRow = -1;
407

    
408
        private class DataTypeListCellRenderer extends DefaultListCellRenderer {
409

    
410
            @Override
411
            public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
412
                JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
413
                if (value != null) {
414
                    label.setText(value.toString());
415
                    Font f = label.getFont();
416
                    if (isOriginalType(currentRow, value.toString())) {
417
                        label.setFont(f.deriveFont(f.getStyle() | Font.BOLD));
418
                    } else {
419
                        label.setFont(f.deriveFont(f.getStyle() & ~Font.BOLD));
420
                    }
421
                }
422
                return label;
423
            }
424
        }
425

    
426
        public DataTypeCellEditor() {
427
            super(new JComboBox());
428
            JComboBox combo = (JComboBox) this.getComponent();
429
            combo.setRenderer(new DataTypeListCellRenderer());
430
            combo.setModel(this.getDataTypeComboModel());
431
        }
432

    
433
        @Override
434
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
435
            this.currentRow = row;
436
            JComboBox combo = (JComboBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
437
            ListElement.setSelected(combo, value);
438
            return combo;
439
        }
440

    
441
        private DefaultComboBoxModel getDataTypeComboModel() {
442
            DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
443
            List<ListElement<Integer>> fieldTypes = new ArrayList<>();
444
            Iterator<DataType> it = dataManager.iterator();
445
            while (it.hasNext()) {
446
                DataType dataType = it.next();
447
                fieldTypes.add(new ListElement<>(dataType.getName(), dataType.getType()));
448
            }
449
            fieldTypes.sort(new Comparator<ListElement<Integer>>() {
450
                @Override
451
                public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
452
                    return o1.toString().compareTo(o2.toString());
453
                }
454
            });
455

    
456
            DefaultComboBoxModel<ListElement<Integer>> model = new DefaultComboBoxModel<>();
457
            for (ListElement<Integer> element : fieldTypes) {
458
                model.addElement(element);
459
            }
460
            return model;
461
        }
462
    }
463

    
464
    private final ExportParameters parameters;
465
    private final JExportProcessPanel processPanel;
466

    
467
//    private Map<String, String> fieldAttributeTypes;
468
//    private FilteredTableModel filteredTableModel;
469
    private TableModel tableModel;
470
    private TableFilterController tableFilterController;
471
    private FeatureType targetFeatureType;
472

    
473
    public SelectAttributesPanel(
474
            JExportProcessPanel processPanel,
475
            ExportParameters parameters
476
    ) {
477
        this.processPanel = processPanel;
478
        this.parameters = parameters;
479
        this.parameters.getExportAttributes().setActive(true);
480
        this.initComponents();
481
    }
482

    
483
    @Override
484
    public String getIdPanel() {
485
        return ExportPanelsManager.PANEL_ATTRIBUTES_SELECTION;
486
    }
487

    
488
    @Override
489
    public String getTitlePanel() {
490
        I18nManager i18n = ToolsLocator.getI18nManager();
491
        return i18n.getTranslation("_Attribute_Selection");
492
    }
493

    
494
    @Override
495
    public boolean validatePanel() throws ExportPanelValidationException {
496
        ExportAttributes attributes = this.parameters.getExportAttributes();
497
        FeatureType theTargetFeatureType = attributes.getTargetFeatureType();
498
        boolean areComputed = false;
499
        for (FeatureAttributeDescriptor featureAttributeDescriptor : theTargetFeatureType) {
500
            if(featureAttributeDescriptor.isComputed()){
501
                areComputed = true;
502
                break;
503
            }
504
        }
505
        if(areComputed){
506
            I18nManager i18n = ToolsLocator.getI18nManager();
507
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
508
            int r = dialogs.confirmDialog(
509
                    i18n.getTranslation("_Virtual_attribute_have_been_selected_it_is_very_possible_that_the_result_can_only_be_opened_by_gvSIG")+"\n"+
510
                            i18n.getTranslation("_do_you_wish_to_continue"), //message
511
                    i18n.getTranslation("_Attributes_selection"), //title
512
                    JOptionPane.YES_NO_OPTION, //OptionType
513
                    JOptionPane.WARNING_MESSAGE, //messageType
514
                    "_export_wizard_virtual_attributes_selection" //msgid
515
            );
516
            if(r != JOptionPane.YES_OPTION){
517
                return false;
518
            }
519
        }
520
        return true;
521
    }
522

    
523
    @Override
524
    public void enterPanel() {
525
        this.fillTableWithAttributes();
526
    }
527

    
528
    @Override
529
    public void previousPanel() {
530
        this.fillTableWithAttributes();
531
    }
532

    
533
    @Override
534
    public void nextPanel() {
535
//        ExportAttributes attributes = this.parameters.getExportAttributes();
536
//        FeatureType theTargetFeatureType = attributes.getTargetFeatureType();
537
//        boolean areComputed = false;
538
//        for (FeatureAttributeDescriptor featureAttributeDescriptor : theTargetFeatureType) {
539
//            if(featureAttributeDescriptor.isComputed()){
540
//                areComputed = true;
541
//                break;
542
//            }
543
//        }
544
//        if(areComputed){
545
//            I18nManager i18n = ToolsLocator.getI18nManager();
546
//            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
547
//            dialogs.confirmDialog(
548
//                    i18n.getTranslation("_There_are_selected_virtual_attributes_it_is_very_possible_that_the_result_can_only_be_opened_by_gvSIG")+"\n"+
549
//                            i18n.getTranslation("_do_you_wish_to_continue"), //message
550
//                    i18n.getTranslation("_Attributes_selection"), //title
551
//                    JOptionPane.YES_NO_OPTION, //OptionType
552
//                    JOptionPane.WARNING_MESSAGE, //messageType
553
//                    "_virtual_attributes_selection" //msgid
554
//            );
555
//            
556
//        }
557
        //get params are in the validate method
558
    }
559

    
560
    @Override
561
    public JComponent asJComponent() {
562
        return this;
563
    }
564

    
565
    private boolean isOriginalType(int row, String type) {
566
        try {
567
            if (this.targetFeatureType == null) {
568
                return true;
569
            }
570
            TableModel model = this.tblAttributes.getModel();
571
            String name = (String) model.getValueAt(row, COLUMN_FIELD_NAME);
572
            FeatureAttributeDescriptor attr = this.targetFeatureType.getAttributeDescriptor(name);
573
            if (attr == null) {
574
                return true;
575
            }
576
            return StringUtils.equalsIgnoreCase(type, attr.getDataTypeName());
577
        } catch (Exception ex) {
578
            return true;
579
        }
580

    
581
    }
582

    
583
    private ExportAttributes getExportAttributes() {
584
        ExportAttributes attributes = this.parameters.getExportAttributes();
585
        return attributes;
586
    }
587

    
588
    private void fillTableWithAttributes() {
589
        ExportAttributes attributes = this.getExportAttributes();
590
        if (this.targetFeatureType == null) {
591
            this.targetFeatureType = this.getExportAttributes().getTargetFeatureType();
592
        }
593

    
594
        this.tableModel = new AttributesTableModel(attributes, this);
595
        this.tblAttributes.setModel(this.tableModel);
596
        this.tableFilterController.setModel(this.tableModel);
597

    
598
        TableColumnModel columnModel = this.tblAttributes.getColumnModel();
599
        columnModel.getColumn(COLUMN_FIELD_ORIGIN).setCellRenderer(new OriginCellRenderer());
600
        columnModel.getColumn(COLUMN_FIELD_TYPE).setCellEditor(new DataTypeCellEditor());
601
        columnModel.getColumn(COLUMN_FIELD_TYPE).setCellRenderer(new DataTypeCellRenderer());
602

    
603
        columnModel.getColumn(COLUMN_FIELD_EXPORT).setPreferredWidth(new JCheckBox().getPreferredSize().width * 2);
604
        columnModel.getColumn(COLUMN_FIELD_TYPE).setPreferredWidth(new JLabel("XIntegerX").getPreferredSize().width);
605
        columnModel.getColumn(COLUMN_FIELD_SIZE).setPreferredWidth(new JLabel("00000").getPreferredSize().width);
606
        columnModel.getColumn(COLUMN_FIELD_ORIGIN).setPreferredWidth(new JLabel("000").getPreferredSize().width);
607
        columnModel.getColumn(COLUMN_FIELD_CALCULATED).setPreferredWidth(new JLabel("000").getPreferredSize().width);
608

    
609
    }
610

    
611
    private void initComponents() {
612
        I18nManager i18n = ToolsLocator.getI18nManager();
613
        this.tblAttributes.getTableHeader().setToolTipText(
614
        i18n.getTranslation("_Select_in_the_check_box_wich_fields_wanted_to_be_exported_and_configure_its_attributes"));
615
        this.messageController = ToolsSwingLocator.getToolsSwingManager().createMessageBarController(lblMessage, 10000);
616
        this.tblAttributes.setAutoCreateRowSorter(true);
617
        this.tblAttributes.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
618
        //this.lblHeader.setText(i18n.getTranslation("_Select_name_type_size_and_attributes_to_export"));
619
        this.lblHeader.setText("<HTML>"+i18n.getTranslation("_Check_wich_fields_you_want_to_export_and_configure_its_attributes") + ". " +
620
               i18n.getTranslation("_Select_the_name_of_the_new_field_size_and_type_that_each_field_will_have_in_the_export_result")+".</HTML>");
621

    
622
        this.tableFilterController = new TableFilterController(
623
                this.tblAttributes,
624
                this.txtFilter,
625
                this.btnFilter,
626
                COLUMN_FIELD_NAME
627
        );
628
        this.btnCheckAll.addActionListener(new ActionListener() {
629
            @Override
630
            public void actionPerformed(ActionEvent e) {
631
                doCheckAll();
632
            }
633
        });
634
        this.btnUncheckAll.addActionListener(new ActionListener() {
635
            @Override
636
            public void actionPerformed(ActionEvent e) {
637
                doUncheckAll();
638
            }
639
        });
640

    
641
        this.translate();
642
    }
643

    
644
    private void doUncheckAll() {
645
        TableModel model = this.tblAttributes.getModel();
646
        for (int row = 0; row < model.getRowCount(); row++) {
647
            model.setValueAt(false, row, COLUMN_FIELD_EXPORT);
648
        }
649
    }
650

    
651
    private void doCheckAll() {
652
        TableModel model = this.tblAttributes.getModel();
653
        for (int row = 0; row < model.getRowCount(); row++) {
654
            model.setValueAt(true, row, COLUMN_FIELD_EXPORT);
655
        }
656
    }
657

    
658
    private void translate() {
659
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
660
        manager.translate(this.lblHeader);
661
    }
662

    
663
    @Override
664
    public ImageIcon loadImage(String imageName) {
665
        String name = FilenameUtils.getBaseName(imageName);
666
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
667
        if (theme.exists(name)) {
668
            return theme.get(name);
669
        }
670
        URL url = this.getClass().getResource(name + ".png");
671
        if (url == null) {
672
            return null;
673
        }
674
        return new ImageIcon(url);
675
    }
676

    
677
    private void setMessage(String toString) {
678
        this.messageController.setText(toString);
679
    }
680
}