Package org.pentaho.reporting.ui.datasources.jdbc.ui

Source Code of org.pentaho.reporting.ui.datasources.jdbc.ui.NamedDataSourceDialogModel$PreviewPossibleUpdateHandler

/*
* 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.JTextField;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;

import org.pentaho.reporting.engine.classic.core.designtime.datafactory.DataSetComboBoxModel;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.DataSetQuery;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.ui.datasources.jdbc.Messages;
import org.pentaho.reporting.ui.datasources.jdbc.connection.JdbcConnectionDefinition;
import org.pentaho.reporting.ui.datasources.jdbc.connection.JdbcConnectionDefinitionManager;

public class NamedDataSourceDialogModel implements DataSourceDialogModel
{

  public static final String QUERY_SELECTED = "querySelected";
  public static final String CONNECTION_SELECTED = "connectionSelected";

  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)
    {
      final DefaultComboBoxModel connections = getConnections();
      final DataSetComboBoxModel<String> queries = getQueries();
      setConnectionSelected(connections.getSelectedItem() != null);
      setQuerySelected(queries.getSelectedItem() != null);

      if (connections.getSelectedItem() == null)
      {
        setPreviewPossible(false);
        return;
      }

      if (queries.getSelectedItem() == null)
      {
        setPreviewPossible(false);
        return;
      }

      final DataSetQuery o = (DataSetQuery) queries.getSelectedItem();
      if (o == null || StringUtils.isEmpty(o.getQueryName()))
      {
        setPreviewPossible(false);
        return;
      }

      setPreviewPossible(true);
    }
  }

  private PropertyChangeSupport propertyChangeSupport;
  private DefaultComboBoxModel connections;
  private DataSetComboBoxModel<String> queries;
  private boolean previewPossible;
  private boolean connectionSelected;
  private boolean querySelected;
  private JdbcConnectionDefinitionManager connectionDefinitionManager;
  private String jdbcUserField;
  private String jdbcPasswordField;
  private JTextField schemaFileNameField;

  public NamedDataSourceDialogModel()
  {
    this(new JdbcConnectionDefinitionManager());
  }

  public NamedDataSourceDialogModel(final JdbcConnectionDefinitionManager connectionDefinitionManager)
  {
    this.connectionDefinitionManager = connectionDefinitionManager;
    propertyChangeSupport = new PropertyChangeSupport(this);
    connections = new DefaultComboBoxModel();
    connections.addListDataListener(new PreviewPossibleUpdateHandler());
    queries = new DataSetComboBoxModel<String>();
    queries.addListDataListener(new PreviewPossibleUpdateHandler());
  }

  public void clear()
  {
    queries.removeAllElements();
    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 DataSetComboBoxModel<String> getQueries()
  {
    return queries;
  }

  public DefaultComboBoxModel getConnections()
  {
    return connections;
  }

  public void addConnection(final JdbcConnectionDefinition definition)
  {
    if (connections.getIndexOf(definition) == -1)
    {
      connections.addElement(definition);
    }
  }

  public void removeConnection(final JdbcConnectionDefinition definition)
  {
    connections.removeElement(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 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)
  {
    this.connectionSelected = connectionSelected;
    propertyChangeSupport.firePropertyChange(CONNECTION_SELECTED, !connectionSelected, connectionSelected);
  }

  public boolean isQuerySelected()
  {
    return querySelected;
  }

  public void setQuerySelected(final boolean querySelected)
  {
    this.querySelected = querySelected;
    propertyChangeSupport.firePropertyChange(QUERY_SELECTED, !querySelected, querySelected);
  }

  public void addQuery(final String queryName, final String query, final String scriptLanguage, final String script)
  {
    queries.addElement(new DataSetQuery<String>(queryName, query, scriptLanguage, script));
  }

  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);
  }

  public JTextField getSchemaFileNameField()
  {
    return schemaFileNameField;
  }

  public void setSchemaFileNameField(final JTextField schemaFileNameField)
  {
    this.schemaFileNameField = schemaFileNameField;
  }

  public void setSelectedQuery(final String selectedQueryName)
  {

    if(queries == null || queries.getSize() == 0)
    {
      return;
    }
    if (selectedQueryName == null)
    {
      queries.setSelectedItem(getFirstQueryName());
      setQuerySelected(getFirstQueryName() != null);
      setPreviewPossible(getFirstQueryName() != null);
      return;
    }
   
    for (int i = 0; i < queries.getSize(); i += 1)
    {
      final DataSetQuery<String> q = (DataSetQuery<String>) queries.getElementAt(i);
      if (selectedQueryName.equals(q.getQueryName()))
      {
        queries.setSelectedItem(q);
        setQuerySelected(true);
        setPreviewPossible(true);
        return;
      }
    }
  }

  public DataSetQuery getFirstQueryName()
  {
    DataSetComboBoxModel<String> dataSetQueries = getQueries();
    if(dataSetQueries != null && dataSetQueries.getSize() > 0)
    {
        return dataSetQueries.getQuery(0);
    }
    return null;
  }

  public String generateQueryName()
  {
    final String queryName = Messages.getString("JdbcDataSourceDialog.Query");
    final DataSetComboBoxModel<String> queries = getQueries();
    for (int i = 1; i < 1000; ++i)
    {
      final String newQuery = queryName + " " + i;
      if (queries.getIndexForQuery(newQuery) == -1)
      {
        return newQuery;
      }
    }
    return queryName;
  }
}
TOP

Related Classes of org.pentaho.reporting.ui.datasources.jdbc.ui.NamedDataSourceDialogModel$PreviewPossibleUpdateHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.