/* * This program is free software; you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software * Foundation. * * You should have received a copy of the GNU Lesser General Public License along with this * program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html * or from the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * This program 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 Lesser General Public License for more details. * * Copyright (c) 2009 Pentaho Corporation. All rights reserved. */ package org.pentaho.reporting.ui.datasources.jdbc.ui; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.DefaultComboBoxModel; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; import org.pentaho.reporting.ui.datasources.jdbc.connection.JdbcConnectionDefinition; import org.pentaho.reporting.ui.datasources.jdbc.connection.JdbcConnectionDefinitionManager; public class SimpleDataSourceDialogModel implements DataSourceDialogModel { private class PreviewPossibleUpdateHandler implements ListDataListener { private PreviewPossibleUpdateHandler() { } public void intervalAdded(final ListDataEvent e) { contentsChanged(e); } public void intervalRemoved(final ListDataEvent e) { contentsChanged(e); } public void contentsChanged(final ListDataEvent e) { setConnectionSelected(getConnections().getSelectedItem() != null); if (getConnections().getSelectedItem() == null) { setPreviewPossible(false); return; } setPreviewPossible(true); } } private PropertyChangeSupport propertyChangeSupport; private DefaultComboBoxModel connections; private boolean previewPossible; private boolean connectionSelected; private JdbcConnectionDefinitionManager connectionDefinitionManager; private String jdbcUserField; private String jdbcPasswordField; public SimpleDataSourceDialogModel() { this(new JdbcConnectionDefinitionManager()); } public SimpleDataSourceDialogModel(final JdbcConnectionDefinitionManager connectionDefinitionManager) { this.connectionDefinitionManager = connectionDefinitionManager; propertyChangeSupport = new PropertyChangeSupport(this); connections = new DefaultComboBoxModel(); connections.addListDataListener(new PreviewPossibleUpdateHandler()); } public void clear() { connections.removeAllElements(); setJdbcPasswordField(null); setJdbcUserField(null); setPreviewPossible(false); final JdbcConnectionDefinition[] jdbcConnectionDefinitions = connectionDefinitionManager.getSources(); for (int i = 0; i < jdbcConnectionDefinitions.length; i++) { final JdbcConnectionDefinition definition = jdbcConnectionDefinitions[i]; connections.addElement(definition); } connections.setSelectedItem(null); } public void addPropertyChangeListener(final PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(final PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(listener); } public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) { propertyChangeSupport.addPropertyChangeListener(propertyName, listener); } public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) { propertyChangeSupport.removePropertyChangeListener(propertyName, listener); } public DefaultComboBoxModel getConnections() { return connections; } public void addConnection(final JdbcConnectionDefinition definition) { if (connections.getIndexOf(definition) == -1) { connections.addElement(definition); } } public void editConnection(final JdbcConnectionDefinition oldConnection, final JdbcConnectionDefinition newConnection) { if (oldConnection == null) { if (newConnection != null) { addConnection(newConnection); } return; } if (newConnection == null) { removeConnection(oldConnection); return; } final int index = connections.getIndexOf(oldConnection); if (index == -1) { connections.addElement(newConnection); } else { connections.insertElementAt(newConnection, index); } connections.removeElement(oldConnection); } public void removeConnection(final JdbcConnectionDefinition definition) { connections.removeElement(definition); } public boolean isPreviewPossible() { return previewPossible; } public void setPreviewPossible(final boolean previewPossible) { final boolean oldPreviewPossible = this.previewPossible; this.previewPossible = previewPossible; propertyChangeSupport.firePropertyChange("previewPossible", oldPreviewPossible, previewPossible); } public boolean isConnectionSelected() { return connectionSelected; } public void setConnectionSelected(final boolean connectionSelected) { final boolean oldConnectionSelected = this.connectionSelected; this.connectionSelected = connectionSelected; propertyChangeSupport.firePropertyChange("connectionSelected", oldConnectionSelected, connectionSelected); } public JdbcConnectionDefinitionManager getConnectionDefinitionManager() { return connectionDefinitionManager; } public String getJdbcUserField() { return jdbcUserField; } public void setJdbcUserField(final String jdbcUserField) { final String oldUser = this.jdbcUserField; this.jdbcUserField = jdbcUserField; propertyChangeSupport.firePropertyChange("jdbcUserField", oldUser, jdbcUserField); } public String getJdbcPasswordField() { return jdbcPasswordField; } public void setJdbcPasswordField(final String jdbcPasswordField) { final String oldPassword = this.jdbcPasswordField; this.jdbcPasswordField = jdbcPasswordField; propertyChangeSupport.firePropertyChange("jdbcPasswordField", oldPassword, jdbcPasswordField); } }