View Javadoc
1   /*
2    * This file is a part of the SchemaSpy project (http://schemaspy.sourceforge.net).
3    * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 John Currier
4    *
5    * SchemaSpy is free software; you can redistribute it and/or
6    * modify it under the terms of the GNU Lesser General Public
7    * License as published by the Free Software Foundation; either
8    * version 2.1 of the License, or (at your option) any later version.
9    *
10   * SchemaSpy is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   * Lesser General Public License for more details.
14   *
15   * You should have received a copy of the GNU Lesser General Public
16   * License along with this library; if not, write to the Free Software
17   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
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   * @author John Currier
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       * This method initializes this
53       *
54       * @return void
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      * This method initializes databaseTypeSelector
109      *
110      * @return javax.swing.JComboBox
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 }