ca.sqlpower.swingui.db.DataSourceTypeCopyPropertiesPanel.java Source code

Java tutorial

Introduction

Here is the source code for ca.sqlpower.swingui.db.DataSourceTypeCopyPropertiesPanel.java

Source

/*
 * 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.util.ArrayList;
import java.util.List;

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 ca.sqlpower.sql.DataSourceCollection;
import ca.sqlpower.sql.JDBCDataSourceType;
import ca.sqlpower.swingui.DataEntryPanel;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;

/**
 * This panel is used to copy all of the properties from a user selected data source type to a
 * given data source type. This allows users to quickly duplicate existing ds types and allows
 * creating new connections faster that are similar to existing ones.
 */
public class DataSourceTypeCopyPropertiesPanel implements DataEntryPanel {

    private final JPanel panel;

    /**
     * The target ds type to copy the properties to.
     */
    private final JDBCDataSourceType dsType;

    /**
     * The combo box used for selecting the ds type to copy from.
     */
    private final JComboBox dsTypesComboBox;

    public DataSourceTypeCopyPropertiesPanel(JDBCDataSourceType type, DataSourceCollection collection) {
        this.dsType = type;

        List<JDBCDataSourceType> types = new ArrayList<JDBCDataSourceType>(collection.getDataSourceTypes());
        types.remove(dsType);
        dsTypesComboBox = new JComboBox(types.toArray());
        dsTypesComboBox.setRenderer(new DefaultListCellRenderer() {
            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;
            }
        });

        panel = buildUI();
    }

    private JPanel buildUI() {
        DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("pref"));
        builder.setDefaultDialogBorder();
        builder.append(new JLabel("Copy all properties from which data source type?"));
        builder.append(dsTypesComboBox);
        builder.append(new JLabel("Note: This will overwrite all current settings on " + dsType.getName() + "."));
        return builder.getPanel();
    }

    public boolean applyChanges() {
        JDBCDataSourceType defaultDSType = (JDBCDataSourceType) dsTypesComboBox.getSelectedItem();
        if (defaultDSType != null && defaultDSType != dsType) {
            for (String key : defaultDSType.getPropertyNames()) {
                if (JDBCDataSourceType.TYPE_NAME.equals(key)) {
                    continue;
                }
                dsType.putProperty(key, defaultDSType.getProperty(key));
            }
        }
        return true;
    }

    public void discardChanges() {
        //do nothing
    }

    public JComponent getPanel() {
        return panel;
    }

    public boolean hasUnsavedChanges() {
        return true;
    }

    /**
     * This is package private and only exists for testing.
     */
    JComboBox getDsTypesComboBox() {
        return dsTypesComboBox;
    }

}