1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.sourceforge.schemaspy.ui;
20
21 import java.awt.BorderLayout;
22 import java.awt.event.ItemEvent;
23 import java.awt.event.ItemListener;
24 import java.io.File;
25 import javax.swing.JComboBox;
26 import javax.swing.JComponent;
27 import javax.swing.JPanel;
28 import javax.swing.JScrollPane;
29 import javax.swing.JTable;
30 import javax.swing.event.TableModelEvent;
31 import javax.swing.event.TableModelListener;
32 import javax.swing.table.TableCellEditor;
33 import javax.swing.table.TableCellRenderer;
34 import javax.swing.table.TableColumn;
35 import net.sourceforge.schemaspy.util.DbSpecificConfig;
36
37
38
39
40 public class DbConfigPanel extends JPanel {
41 private static final long serialVersionUID = 1L;
42 private JComboBox databaseTypeSelector;
43 private final DbConfigTableModel model = new DbConfigTableModel();
44 private JTable table;
45
46 public DbConfigPanel() {
47 super();
48 initialize();
49 }
50
51
52
53
54
55
56 private void initialize() {
57 table = new JTable(model) {
58 private static final long serialVersionUID = 1L;
59
60 {
61 setDefaultRenderer(Boolean.TYPE, getDefaultRenderer(Boolean.class));
62 setDefaultEditor(Boolean.TYPE, getDefaultEditor(Boolean.class));
63 setDefaultRenderer(Number.class, getDefaultRenderer(String.class));
64 setDefaultEditor(Number.class, getDefaultEditor(String.class));
65
66 DirectoryCellEditor fileEditor = new DirectoryCellEditor(model, new File("/"));
67 setDefaultRenderer(File.class, fileEditor);
68 setDefaultEditor(File.class, fileEditor);
69 }
70
71 @Override
72 public TableCellRenderer getCellRenderer(int row, int column) {
73 TableCellRenderer renderer;
74
75 if (column == 0)
76 renderer = super.getCellRenderer(row, column);
77 else
78 renderer = getDefaultRenderer(model.getClass(row));
79 if (renderer instanceof JComponent)
80 ((JComponent)renderer).setToolTipText(model.getDescription(row));
81 return renderer;
82 }
83
84 @Override
85 public TableCellEditor getCellEditor(int row, int column) {
86 return getDefaultEditor(model.getClass(row));
87 }
88 };
89
90 model.addTableModelListener(new TableModelListener() {
91 public void tableChanged(TableModelEvent e) {
92 TableColumn paramColumn = table.getColumnModel().getColumn(0);
93 paramColumn.setPreferredWidth(UiUtils.getPreferredColumnWidth(table, paramColumn) + 4);
94 paramColumn.setMaxWidth(paramColumn.getPreferredWidth());
95 table.sizeColumnsToFit(0);
96 }
97 });
98
99 setLayout(new BorderLayout());
100 JScrollPane scroller = new JScrollPane(table);
101 scroller.setViewportBorder(null);
102 add(scroller, BorderLayout.CENTER);
103
104 add(getDatabaseTypeSelector(), BorderLayout.NORTH);
105 }
106
107
108
109
110
111
112 private JComboBox getDatabaseTypeSelector() {
113 if (databaseTypeSelector == null) {
114 DbTypeSelectorModel selectorModel = new DbTypeSelectorModel("ora");
115 databaseTypeSelector = new JComboBox(selectorModel);
116 databaseTypeSelector.addItemListener(new ItemListener() {
117 public void itemStateChanged(ItemEvent evt) {
118 if (evt.getStateChange() == ItemEvent.SELECTED)
119 model.setDbSpecificConfig((DbSpecificConfig)evt.getItem());
120 }
121 });
122
123 DbSpecificConfig selected = (DbSpecificConfig)selectorModel.getSelectedItem();
124 if (selected != null)
125 model.setDbSpecificConfig(selected);
126 }
127 return databaseTypeSelector;
128 }
129 }