/* * Copyright (c) 2008, SQL Power Group Inc. * * This file is part of SQL Power Library. * * SQL Power Library is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * SQL Power Library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package ca.sqlpower.swingui.db; import java.awt.Component; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.ButtonGroup; import javax.swing.DefaultListCellRenderer; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JRadioButton; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; import ca.sqlpower.sql.DataSourceCollection; import ca.sqlpower.sql.JDBCDataSourceType; import ca.sqlpower.swingui.DataEntryPanel; import ca.sqlpower.swingui.Messages; /** * This panel will appear when a user is creating a new data source type * to allow the user to choose which data source type to copy properties * from if they want to start with non-empty fields. */ public class NewDataSourceTypePanel implements DataEntryPanel { /** * The new type that the properties will be copied into if the user * selected a data source type to copy from. */ private final JDBCDataSourceType dsType; /** * A combo box for users to choose which DS type to copy from. */ private final JComboBox existingDSTypes; /** * The editor the new data source type created will be added to * to allow further customization by the user. */ private final DataSourceTypeEditor editor; private final JPanel panel; /** * The radio button to indicate that the user wants to create a * new data source type that has no properties set. */ private JRadioButton blankOption; /** * The radio button that indicates the user wants to create a copy * of an existing data source type. */ private JRadioButton copyOption; public NewDataSourceTypePanel(DataSourceTypeEditor editor, DataSourceCollection collection) { this.editor = editor; this.dsType = new JDBCDataSourceType(); dsType.setName(Messages.getString("DataSourceTypeEditor.defaultDataSourceName")); //$NON-NLS-1$ existingDSTypes = new JComboBox(collection.getDataSourceTypes().toArray()); existingDSTypes.setRenderer(new DefaultListCellRenderer() { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); if (c instanceof JLabel && value != null) { ((JLabel) c).setText(((JDBCDataSourceType) value).getName()); } return c; } }); blankOption = new JRadioButton(new AbstractAction("Blank") { public void actionPerformed(ActionEvent e) { existingDSTypes.setEnabled(false); } }); copyOption = new JRadioButton(new AbstractAction("Copy defaults from..") { public void actionPerformed(ActionEvent e) { existingDSTypes.setEnabled(true); } }); ButtonGroup optionGroup = new ButtonGroup(); optionGroup.add(blankOption); optionGroup.add(copyOption); blankOption.setSelected(true); existingDSTypes.setEnabled(false); panel = buildUI(); } private JPanel buildUI() { DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("pref")); builder.setDefaultDialogBorder(); builder.append("New Data Source Type"); builder.append(blankOption); builder.append(copyOption); builder.append(existingDSTypes); return builder.getPanel(); } public boolean applyChanges() { if (copyOption.isSelected()) { JDBCDataSourceType defaultDSType = (JDBCDataSourceType) existingDSTypes.getSelectedItem(); if (defaultDSType != null && defaultDSType != dsType) { for (String key : defaultDSType.getPropertyNames()) { if (JDBCDataSourceType.TYPE_NAME.equals(key)) { continue; } dsType.putProperty(key, defaultDSType.getProperty(key)); } } } editor.addDsType(dsType); return true; } public void discardChanges() { //Do nothing } public JComponent getPanel() { return panel; } public boolean hasUnsavedChanges() { return true; } /** * Package private method for testing to change the radio buttons. */ void setBlankOptionSelected(boolean selected) { blankOption.setSelected(selected); copyOption.setSelected(!selected); } /** * Package private method for testing to define which dsType will * be selected in the existingDSTypes combo box. * @param copyType */ void setCopyDSType(JDBCDataSourceType copyType) { existingDSTypes.setSelectedItem(copyType); } }