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 @ 44861

History | View | Annotate | Download (23.7 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.net.URL;
10
import java.util.ArrayList;
11
import java.util.Comparator;
12
import java.util.Iterator;
13
import java.util.List;
14
import java.util.Objects;
15
import java.util.Timer;
16
import java.util.TimerTask;
17
import javax.swing.DefaultCellEditor;
18
import javax.swing.DefaultComboBoxModel;
19
import javax.swing.DefaultListCellRenderer;
20
import javax.swing.ImageIcon;
21
import javax.swing.JButton;
22
import javax.swing.JCheckBox;
23
import javax.swing.JComboBox;
24
import javax.swing.JComponent;
25
import javax.swing.JLabel;
26
import javax.swing.JList;
27
import javax.swing.JOptionPane;
28
import javax.swing.JTable;
29
import javax.swing.table.AbstractTableModel;
30
import javax.swing.table.TableCellRenderer;
31
import javax.swing.table.TableColumnModel;
32
import javax.swing.table.TableModel;
33
import javax.swing.text.JTextComponent;
34
import org.apache.commons.io.FilenameUtils;
35
import org.apache.commons.lang.StringUtils;
36
import org.gvsig.export.ExportAttributes;
37
import org.gvsig.export.ExportAttributes.ExportAttribute;
38
import org.gvsig.export.ExportParameters;
39
import org.gvsig.export.swing.JExportProcessPanel;
40
import org.gvsig.export.swing.spi.ExportPanel;
41
import org.gvsig.export.swing.spi.ExportPanelValidationException;
42
import org.gvsig.export.swing.spi.ExportPanelsManager;
43
import org.gvsig.fmap.dal.DataTypes;
44
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
45
import org.gvsig.fmap.dal.feature.FeatureType;
46
import org.gvsig.tools.ToolsLocator;
47
import org.gvsig.tools.dataTypes.DataType;
48
import org.gvsig.tools.dataTypes.DataTypesManager;
49
import org.gvsig.tools.i18n.I18nManager;
50
import org.gvsig.tools.namestranslator.NamesTranslator;
51
import org.gvsig.tools.swing.api.FilteredTableModel;
52
import org.gvsig.tools.swing.api.ListElement;
53
import org.gvsig.tools.swing.api.MessageBarController;
54
import org.gvsig.tools.swing.api.ToolsSwingLocator;
55
import org.gvsig.tools.swing.api.ToolsSwingManager;
56
import org.gvsig.tools.swing.icontheme.IconTheme;
57
import org.slf4j.Logger;
58
import org.slf4j.LoggerFactory;
59

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

    
69
    private static final Logger LOGGER = LoggerFactory.getLogger(SelectAttributesPanel.class);
70

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

    
79
    private static final int COLUMN_FIELD_COUNT = 7;
80

    
81
    private static final int ORIGIN_REAL = 0;
82
    private static final int ORIGIN_CALCULATED = 1;
83
    private static final int ORIGIN_EXTRA = 2;
84
    private MessageBarController messageController;
85

    
86
    private static class AttributesTableModel
87
            extends AbstractTableModel
88
            implements TableModel {
89

    
90
        final private ExportAttributes attributes;
91
        private final String[] columnNames = new String[COLUMN_FIELD_COUNT];
92
        private final Class[] columnClases = new Class[COLUMN_FIELD_COUNT];
93
        private final DataTypesManager dataManager;
94
        private final SelectAttributesPanel panel;
95

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

    
109
            columnClases[COLUMN_FIELD_NAME] = String.class;
110
            columnClases[COLUMN_FIELD_NEW_NAME] = String.class;
111
            columnClases[COLUMN_FIELD_ORIGIN] = String.class;
112
            columnClases[COLUMN_FIELD_TYPE] = String.class;
113
            columnClases[COLUMN_FIELD_SIZE] = Integer.class;
114
            columnClases[COLUMN_FIELD_EXPORT] = Boolean.class;
115
            columnClases[COLUMN_FIELD_CALCULATED] = Boolean.class;
116
        }
117

    
118
        @Override
119
        public int getRowCount() {
120
            return this.attributes.size();
121
        }
122

    
123
        @Override
124
        public int getColumnCount() {
125
            return COLUMN_FIELD_COUNT;
126
        }
127

    
128
        @Override
129
        public String getColumnName(int columnIndex) {
130
            return this.columnNames[columnIndex];
131
        }
132

    
133
        @Override
134
        public Class<?> getColumnClass(int columnIndex) {
135
            return this.columnClases[columnIndex];
136
        }
137

    
138
        @Override
139
        public boolean isCellEditable(int rowIndex, int columnIndex) {
140
            switch (columnIndex) {
141
                case COLUMN_FIELD_NAME:
142
                    return false;
143
                case COLUMN_FIELD_ORIGIN:
144
                    return false;
145
                case COLUMN_FIELD_CALCULATED: {
146
                    ExportAttribute attr = this.attributes.get(rowIndex);
147
                    DataType dataType = attr.getDescriptor().getDataType();
148
                    if (dataType.isContainer()
149
                            || dataType.isObject()
150
                            || dataType.isDynObject()) {
151
                        return false;
152
                    }
153
                    if (attr.getDescriptor().isComputed()) {
154
                        return true;
155
                    }
156
                    return false;
157
                }
158
                default:
159
                    return true;
160
            }
161
        }
162

    
163
        @Override
164
        public Object getValueAt(int rowIndex, int columnIndex) {
165
            ExportAttribute attr = this.attributes.get(rowIndex);
166
            switch (columnIndex) {
167
                case COLUMN_FIELD_NAME:
168
                    return attr.getName();
169
                case COLUMN_FIELD_NEW_NAME:
170
                    return attr.getNewName();
171
                case COLUMN_FIELD_ORIGIN:
172
                    if (attr.getDescriptor().isComputed()) {
173
                        if (attr.getDescriptor().getFeatureType() != null) {
174
                            return ORIGIN_CALCULATED;
175
                        } else {
176
                            return ORIGIN_EXTRA;
177
                        }
178
                    } else {
179
                        return ORIGIN_REAL;
180
                    }
181
                case COLUMN_FIELD_TYPE:
182
                    return dataManager.getTypeName(attr.getNewDataType());
183
                case COLUMN_FIELD_SIZE:
184
                    return attr.getSize();
185
                case COLUMN_FIELD_EXPORT:
186
                    return attr.isExported();
187
                case COLUMN_FIELD_CALCULATED:
188
                    return attr.isComputed();
189
                default:
190
                    return null;
191
            }
192
        }
193

    
194
        @Override
195
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
196
            ExportAttribute attr = this.attributes.get(rowIndex);
197
            switch (columnIndex) {
198
                case COLUMN_FIELD_NAME:
199
                    break;
200
                case COLUMN_FIELD_NEW_NAME:
201
                    int indexChanged = attr.setNewName(Objects.toString(aValue, attr.getName()));
202
                    NamesTranslator translator = this.attributes.getNamesTranslator();
203
                    I18nManager i18 = ToolsLocator.getI18nManager();
204
                    if (!StringUtils.equalsIgnoreCase(Objects.toString(aValue, attr.getName()),
205
                            translator.getTranslation(attr.getName())))  {
206
                        StringBuilder changedLog = new StringBuilder();
207
                        changedLog.append("'");
208
                        changedLog.append(Objects.toString(aValue, attr.getName()));
209
                        changedLog.append("' ");
210
                        changedLog.append(i18.getTranslation("_field_name_has_been_fixed_to"));
211
                        changedLog.append(" '");
212
                        changedLog.append(translator.getTranslation(attr.getName()));
213
                        changedLog.append("'");
214
                        panel.setMessage(changedLog.toString());
215

    
216
                    }
217
                    if (indexChanged != -1) {
218
                        String fieldSource = translator.getSource(indexChanged);
219
                        String fieldTarget = translator.getTranslation(indexChanged);
220
                        StringBuilder changedLog = new StringBuilder();
221
                        changedLog.append("'");
222
                        changedLog.append(fieldSource);
223
                        changedLog.append("' ");
224
                        changedLog.append(i18.getTranslation("_has_been_changed_to_avoid_duplicates_for"));
225
                        changedLog.append(" '");
226
                        changedLog.append(fieldTarget);
227
                        changedLog.append("'");
228
                        panel.setMessage(changedLog.toString());
229

    
230
                    }
231

    
232
                    break;
233

    
234
                case COLUMN_FIELD_TYPE:
235
                    attr.setNewType(dataManager.getType(Objects.toString(aValue)));
236
                    break;
237
                case COLUMN_FIELD_SIZE:
238
                    try {
239
                    attr.setSize(Integer.parseInt(Objects.toString(aValue)));
240
                } catch (Exception ex) {
241
                    LOGGER.warn("Not been able to set size value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
242
                }
243
                break;
244
                case COLUMN_FIELD_EXPORT:
245
                    try {
246
                    attr.setExported((boolean) dataManager.get(DataTypes.BOOLEAN).coerce(aValue));
247
                } catch (Exception ex) {
248
                    LOGGER.warn("Not been able to set exported value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
249
                }
250
                break;
251
                case COLUMN_FIELD_CALCULATED:
252
                    try {
253
                    attr.setComputed((boolean) dataManager.get(DataTypes.BOOLEAN).coerce(aValue));
254
                } catch (Exception ex) {
255
                    LOGGER.warn("Not been able to set calculated value of attribute " + attr.getName() + " (" + Objects.toString(aValue) + ").", ex);
256
                }
257
                break;
258
                default:
259
                    break;
260
            }
261
            this.fireTableCellUpdated(rowIndex, columnIndex);
262
        }
263
    }
264

    
265
    private static class TableFilterController {
266

    
267
        private final JTable jtable;
268
        private final JTextComponent jtext;
269
        private final JButton btnFilter;
270
        private final int filterColumn;
271

    
272
        private FilteredTableModel tableModel;
273

    
274
        public TableFilterController(JTable jtable, JTextComponent jtext, JButton btnFilter, int filterColumn) {
275
            this.jtable = jtable;
276
            this.filterColumn = filterColumn;
277
            this.btnFilter = btnFilter;
278
            this.jtext = jtext;
279
            this.tableModel = null;
280
            ToolsSwingLocator.getToolsSwingManager().setDefaultPopupMenu(jtext);
281
            ToolsSwingLocator.getToolsSwingManager().addClearButton(jtext, new ActionListener() {
282
                @Override
283
                public void actionPerformed(ActionEvent e) {
284
                    if (tableModel != null) {
285
                        tableModel.setFilter(null);
286
                        jtext.setText("");
287
                    }
288
                }
289
            });
290
            this.jtext.addKeyListener(new KeyAdapter() {
291
                @Override
292
                public void keyPressed(KeyEvent e) {
293
                    if (e.getKeyChar() == '\n') {
294
                        if (tableModel != null) {
295
                            tableModel.setFilter(jtext.getText());
296
                        }
297
                    }
298
                }
299
            });
300
            this.btnFilter.addActionListener(new ActionListener() {
301
                @Override
302
                public void actionPerformed(ActionEvent e) {
303
                    if (tableModel != null) {
304
                        tableModel.setFilter(jtext.getText());
305
                    }
306
                }
307
            });
308
        }
309

    
310
        public void setModel(TableModel tableModel) {
311
            this.tableModel = ToolsSwingLocator.getToolsSwingManager().createFilteredTableModel(
312
                    tableModel,
313
                    this.filterColumn
314
            );
315
            this.jtable.setModel(this.tableModel);
316
        }
317
    }
318

    
319
    private class DataTypeCellRenderer
320
            extends JLabel
321
            implements TableCellRenderer {
322

    
323
        public DataTypeCellRenderer() {
324
        }
325

    
326
        @Override
327
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
328
            if (value != null) {
329
                String name = (String) table.getModel().getValueAt(row, COLUMN_FIELD_NAME);
330
                this.setText(value.toString());
331
                Font f = this.getFont();
332
                if (isOriginalType(row, value.toString())) {
333
                    this.setFont(f.deriveFont(f.getStyle() & ~Font.BOLD));
334
                } else {
335
                    this.setFont(f.deriveFont(f.getStyle() | Font.BOLD));
336
                }
337
            } else {
338
                this.setText("");
339
            }
340
            return this;
341
        }
342
    }
343

    
344
    private class OriginCellRenderer
345
            extends JLabel
346
            implements TableCellRenderer {
347

    
348
        public OriginCellRenderer() {
349
        }
350

    
351
        @Override
352
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
353
            if (column == COLUMN_FIELD_ORIGIN) {
354
                int origin = (int) table.getModel().getValueAt(row, COLUMN_FIELD_ORIGIN);
355
                IconTheme iconManager = ToolsSwingLocator.getIconThemeManager().getDefault();
356
                I18nManager i18Manager = ToolsLocator.getI18nManager();
357
                this.setHorizontalAlignment(JLabel.CENTER);
358
                switch (origin) {
359
                    case ORIGIN_CALCULATED:
360
                        this.setToolTipText(i18Manager.getTranslation("_Calculated_field"));
361
                        this.setIcon((iconManager.get("column-calculated")));
362
                        break;
363
                    case ORIGIN_EXTRA:
364
                        this.setToolTipText(i18Manager.getTranslation("_Extra_field"));
365
                        this.setIcon((iconManager.get("column-extra")));
366
                        break;
367
                    case ORIGIN_REAL:
368
                        this.setToolTipText(i18Manager.getTranslation("_Real_field"));
369
                        this.setIcon((iconManager.get("column-true")));
370
                        break;
371
                    default:
372
                        this.setText(value.toString());
373
                        break;
374
                }
375
                return this;
376
            }
377
            return this;
378
        }
379
    }
380

    
381
    private class DataTypeCellEditor extends DefaultCellEditor {
382

    
383
        private int currentRow = -1;
384

    
385
        private class DataTypeListCellRenderer extends DefaultListCellRenderer {
386

    
387
            @Override
388
            public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
389
                JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
390
                if (value != null) {
391
                    label.setText(value.toString());
392
                    Font f = label.getFont();
393
                    if (isOriginalType(currentRow, value.toString())) {
394
                        label.setFont(f.deriveFont(f.getStyle() | Font.BOLD));
395
                    } else {
396
                        label.setFont(f.deriveFont(f.getStyle() & ~Font.BOLD));
397
                    }
398
                }
399
                return label;
400
            }
401
        }
402

    
403
        public DataTypeCellEditor() {
404
            super(new JComboBox());
405
            JComboBox combo = (JComboBox) this.getComponent();
406
            combo.setRenderer(new DataTypeListCellRenderer());
407
            combo.setModel(this.getDataTypeComboModel());
408
        }
409

    
410
        @Override
411
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
412
            this.currentRow = row;
413
            JComboBox combo = (JComboBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
414
            ListElement.setSelected(combo, value);
415
            return combo;
416
        }
417

    
418
        private DefaultComboBoxModel getDataTypeComboModel() {
419
            DataTypesManager dataManager = ToolsLocator.getDataTypesManager();
420
            List<ListElement<Integer>> fieldTypes = new ArrayList<>();
421
            Iterator<DataType> it = dataManager.iterator();
422
            while (it.hasNext()) {
423
                DataType dataType = it.next();
424
                fieldTypes.add(new ListElement<>(dataType.getName(), dataType.getType()));
425
            }
426
            fieldTypes.sort(new Comparator<ListElement<Integer>>() {
427
                @Override
428
                public int compare(ListElement<Integer> o1, ListElement<Integer> o2) {
429
                    return o1.toString().compareTo(o2.toString());
430
                }
431
            });
432

    
433
            DefaultComboBoxModel<ListElement<Integer>> model = new DefaultComboBoxModel<>();
434
            for (ListElement<Integer> element : fieldTypes) {
435
                model.addElement(element);
436
            }
437
            return model;
438
        }
439
    }
440

    
441
    private final ExportParameters parameters;
442
    private final JExportProcessPanel processPanel;
443

    
444
//    private Map<String, String> fieldAttributeTypes;
445
//    private FilteredTableModel filteredTableModel;
446
    private TableModel tableModel;
447
    private TableFilterController tableFilterController;
448
    private FeatureType targetFeatureType;
449

    
450
    public SelectAttributesPanel(
451
            JExportProcessPanel processPanel,
452
            ExportParameters parameters
453
    ) {
454
        this.processPanel = processPanel;
455
        this.parameters = parameters;
456
        this.parameters.getExportAttributes().setActive(true);
457
        this.initComponents();
458
    }
459

    
460
    @Override
461
    public String getIdPanel() {
462
        return ExportPanelsManager.PANEL_ATTRIBUTES_SELECTION;
463
    }
464

    
465
    @Override
466
    public String getTitlePanel() {
467
        I18nManager i18n = ToolsLocator.getI18nManager();
468
        return i18n.getTranslation("_Attribute_Selection");
469
    }
470

    
471
    @Override
472
    public boolean validatePanel() throws ExportPanelValidationException {
473
        return true;
474
    }
475

    
476
    @Override
477
    public void enterPanel() {
478
        this.fillTableWithAttributes();
479
    }
480

    
481
    @Override
482
    public void previousPanel() {
483
        this.fillTableWithAttributes();
484
    }
485

    
486
    @Override
487
    public void nextPanel() {
488
        //get params are in the validate method
489
    }
490

    
491
    @Override
492
    public JComponent asJComponent() {
493
        return this;
494
    }
495

    
496
    private boolean isOriginalType(int row, String type) {
497
        try {
498
            if (this.targetFeatureType == null) {
499
                return true;
500
            }
501
            TableModel model = this.tblAttributes.getModel();
502
            String name = (String) model.getValueAt(row, COLUMN_FIELD_NAME);
503
            FeatureAttributeDescriptor attr = this.targetFeatureType.getAttributeDescriptor(name);
504
            if (attr == null) {
505
                return true;
506
            }
507
            return StringUtils.equalsIgnoreCase(type, attr.getDataTypeName());
508
        } catch (Exception ex) {
509
            return true;
510
        }
511

    
512
    }
513

    
514
    private ExportAttributes getExportAttributes() {
515
        ExportAttributes attributes = this.parameters.getExportAttributes();
516
        return attributes;
517
    }
518

    
519
    private void fillTableWithAttributes() {
520
        ExportAttributes attributes = this.getExportAttributes();
521
        if (this.targetFeatureType == null) {
522
            this.targetFeatureType = this.getExportAttributes().getTargetFeatureType();
523
        }
524

    
525
        this.tableModel = new AttributesTableModel(attributes, this);
526
        this.tblAttributes.setModel(this.tableModel);
527
        this.tableFilterController.setModel(this.tableModel);
528

    
529
        TableColumnModel columnModel = this.tblAttributes.getColumnModel();
530
        columnModel.getColumn(COLUMN_FIELD_ORIGIN).setCellRenderer(new OriginCellRenderer());
531
        columnModel.getColumn(COLUMN_FIELD_TYPE).setCellEditor(new DataTypeCellEditor());
532
        columnModel.getColumn(COLUMN_FIELD_TYPE).setCellRenderer(new DataTypeCellRenderer());
533

    
534
        columnModel.getColumn(COLUMN_FIELD_EXPORT).setPreferredWidth(new JCheckBox().getPreferredSize().width * 2);
535
        columnModel.getColumn(COLUMN_FIELD_TYPE).setPreferredWidth(new JLabel("XIntegerX").getPreferredSize().width);
536
        columnModel.getColumn(COLUMN_FIELD_SIZE).setPreferredWidth(new JLabel("00000").getPreferredSize().width);
537
        columnModel.getColumn(COLUMN_FIELD_ORIGIN).setPreferredWidth(new JLabel("000").getPreferredSize().width);
538
        columnModel.getColumn(COLUMN_FIELD_CALCULATED).setPreferredWidth(new JLabel("000").getPreferredSize().width);
539

    
540
    }
541

    
542
    private void initComponents() {
543
        this.messageController = ToolsSwingLocator.getToolsSwingManager().createMessageBarController(lblMessage, 10000);
544
        this.tblAttributes.setAutoCreateRowSorter(true);
545
        this.tblAttributes.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
546
        I18nManager i18n = ToolsLocator.getI18nManager();
547
        this.lblHeader.setText(i18n.getTranslation("_Select_name_type_size_and_attributes_to_export"));
548

    
549
        this.tableFilterController = new TableFilterController(
550
                this.tblAttributes,
551
                this.txtFilter,
552
                this.btnFilter,
553
                COLUMN_FIELD_NAME
554
        );
555
        this.btnCheckAll.addActionListener(new ActionListener() {
556
            @Override
557
            public void actionPerformed(ActionEvent e) {
558
                doCheckAll();
559
            }
560
        });
561
        this.btnUncheckAll.addActionListener(new ActionListener() {
562
            @Override
563
            public void actionPerformed(ActionEvent e) {
564
                doUncheckAll();
565
            }
566
        });
567

    
568
        this.translate();
569
    }
570

    
571
    private void doUncheckAll() {
572
        TableModel model = this.tblAttributes.getModel();
573
        for (int row = 0; row < model.getRowCount(); row++) {
574
            model.setValueAt(false, row, COLUMN_FIELD_EXPORT);
575
        }
576
    }
577

    
578
    private void doCheckAll() {
579
        TableModel model = this.tblAttributes.getModel();
580
        for (int row = 0; row < model.getRowCount(); row++) {
581
            model.setValueAt(true, row, COLUMN_FIELD_EXPORT);
582
        }
583
    }
584

    
585
    private void translate() {
586
        ToolsSwingManager manager = ToolsSwingLocator.getToolsSwingManager();
587
        manager.translate(this.lblHeader);
588
    }
589

    
590
    @Override
591
    public ImageIcon loadImage(String imageName) {
592
        String name = FilenameUtils.getBaseName(imageName);
593
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
594
        if (theme.exists(name)) {
595
            return theme.get(name);
596
        }
597
        URL url = this.getClass().getResource(name + ".png");
598
        if (url == null) {
599
            return null;
600
        }
601
        return new ImageIcon(url);
602
    }
603

    
604
    private void setMessage(String toString) {
605
        this.messageController.setText(toString);
606
    }
607
}