Package org.pentaho.reporting.ui.datasources.sequence

Source Code of org.pentaho.reporting.ui.datasources.sequence.SequenceDataSourceEditor$SequenceChangeHandler

/*!
* 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) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.ui.datasources.sequence;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.core.designtime.DefaultDesignTimeContext;
import org.pentaho.reporting.engine.classic.core.designtime.DesignTimeContext;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.DataSetQuery;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.NamedQueryModel;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.QueryAddAction;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.QueryNameListCellRenderer;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.QueryNameTextFieldDocumentListener;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.QueryRemoveAction;
import org.pentaho.reporting.engine.classic.core.designtime.datafactory.QuerySelectedHandler;
import org.pentaho.reporting.engine.classic.core.modules.gui.commonswing.ExceptionDialog;
import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sequence.Sequence;
import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sequence.SequenceDataFactory;
import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sequence.SequenceDescription;
import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sequence.SequenceRegistry;
import org.pentaho.reporting.libraries.designtime.swing.BorderlessButton;
import org.pentaho.reporting.libraries.designtime.swing.CommonDialog;
import org.pentaho.reporting.libraries.designtime.swing.background.DataPreviewDialog;

public class SequenceDataSourceEditor extends CommonDialog
{
  private class QueryNameHandler extends QueryNameTextFieldDocumentListener<Sequence>
  {
    private QueryNameHandler(final NamedQueryModel<Sequence> dialogModel)
    {
      super(dialogModel);
    }

    protected void setEditorQuery(final DataSetQuery<Sequence> dataSetQuery)
    {
      if (dataSetQuery == null)
      {
        queryNameTextField.setText(null);
        sequenceEditor.setSequence(null);
        return;
      }

      queryNameTextField.setText(dataSetQuery.getQueryName());
      sequenceEditor.setSequence(dataSetQuery.getQuery());
    }
  }

  private class PreviewAction extends AbstractAction
  {
    private PreviewAction()
    {
      putValue(Action.NAME, Messages.getString("SequenceDataSourceEditor.Preview.Name"));
    }

    public void actionPerformed(final ActionEvent aEvt)
    {
      try
      {
        final Sequence query = sequenceEditor.getSequence();
        if (query == null)
        {
          return;
        }
        final DataPreviewDialog previewDialog = new DataPreviewDialog(SequenceDataSourceEditor.this);
        final SequencePreviewWorker worker = new SequencePreviewWorker(query, designTimeContext);
        previewDialog.showData(worker);

        final ReportDataFactoryException factoryException = worker.getException();
        if (factoryException != null)
        {
          ExceptionDialog.showExceptionDialog(SequenceDataSourceEditor.this,
              Messages.getString("SequenceDataSourceEditor.PreviewError.Title"),
              Messages.getString("SequenceDataSourceEditor.PreviewError.Message"), factoryException);
        }

      }
      catch (Exception e)
      {
        ExceptionDialog.showExceptionDialog(SequenceDataSourceEditor.this,
            Messages.getString("SequenceDataSourceEditor.PreviewError.Title"),
            Messages.getString("SequenceDataSourceEditor.PreviewError.Message"), e);
      }
    }
  }

  private class SequenceChangeHandler implements PropertyChangeListener
  {
    private SequenceChangeHandler()
    {
    }

    public void propertyChange(final PropertyChangeEvent evt)
    {
      final DataSetQuery<Sequence> selectedQuery = queries.getQueries().getSelectedQuery();
      if (selectedQuery != null)
      {
        selectedQuery.setQuery(sequenceEditor.getSequence());
      }
    }
  }

  private class SequenceQueryModel extends NamedQueryModel<Sequence>
  {
    private SequenceQueryModel()
    {
    }

    protected Sequence createDefaultObject()
    {
      final SequenceDescription defaultSequence = getDefaultSequence();
      if (defaultSequence == null)
      {
        return null;
      }
      return defaultSequence.newInstance();
    }

    protected void setQuerySelected(final boolean querySelected)
    {
      super.setQuerySelected(querySelected);
      queryNameTextField.setEnabled(querySelected);
      sequenceEditor.setEnabled(querySelected);
    }

    public void setSelectedDataSetQuery(final DataSetQuery<Sequence> sequenceDataSetQuery)
    {
      sequenceEditor.stopEditing();
      super.setSelectedDataSetQuery(sequenceDataSetQuery);
    }
  }

  private JTextField queryNameTextField;
  private JList queryNameList;
  private SequenceEditor sequenceEditor;
  private NamedQueryModel<Sequence> queries;
  private DesignTimeContext designTimeContext;
  private SequenceRegistry registry;
  private PreviewAction previewAction;
  /** @noinspection FieldCanBeLocal, UnusedDeclaration */
  private QuerySelectedHandler querySelectedHandler;

  public SequenceDataSourceEditor()
  {
    init();
  }

  public SequenceDataSourceEditor(final Frame owner) throws HeadlessException
  {
    super(owner);
    init();
  }

  public SequenceDataSourceEditor(final Dialog owner) throws HeadlessException
  {
    super(owner);
    init();
  }

  private SequenceDescription getDefaultSequence()
  {
    final SequenceDescription[] sequences = registry.getSequences();
    if (sequences.length == 0)
    {
      return null;
    }
    return sequences[0];
  }

  protected void init()
  {
    registry = new SequenceRegistry();
    queries = new SequenceQueryModel();
    previewAction = new PreviewAction();

    final QueryNameHandler queryNameHandler = new QueryNameHandler(queries);

    queryNameList = new JList(queries.getQueries());
    queryNameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    queryNameList.setVisibleRowCount(5);
    queryNameList.setCellRenderer(new QueryNameListCellRenderer());

    querySelectedHandler = new QuerySelectedHandler<Sequence>(queries, queryNameList);

    queryNameTextField = new JTextField(null, 0);
    queryNameTextField.setColumns(35);
    queryNameTextField.getDocument().addDocumentListener(queryNameHandler);
    queryNameTextField.setEnabled(false);

    sequenceEditor = new SequenceEditor();
    sequenceEditor.addPropertyChangeListener("sequence", new SequenceChangeHandler());

    setTitle(Messages.getString("SequenceDataSourceEditor.Title"));

    super.init();
  }

  protected String getDialogId()
  {
    return "SequenceDataSourceEditor";
  }

  protected Component createContentPane()
  {

    final JPanel namePanel = new JPanel(new BorderLayout());
    namePanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 0, 0));
    namePanel.add(BorderLayout.NORTH, new JLabel(Messages.getString("SequenceDataSourceEditor.QueryName")));
    namePanel.add(BorderLayout.CENTER, queryNameTextField);

    final JPanel queryConfigPane = new JPanel(new BorderLayout());
    queryConfigPane.add(createQuerySelectionPanel(), BorderLayout.NORTH);
    queryConfigPane.add(namePanel, BorderLayout.CENTER);

    final JPanel previewButtonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    previewButtonPanel.add(new JButton(previewAction));

    final JPanel contentPane = new JPanel();
    contentPane.setLayout(new BorderLayout());
    contentPane.add(queryConfigPane, BorderLayout.NORTH);
    contentPane.add(sequenceEditor, BorderLayout.CENTER);
    contentPane.add(previewButtonPanel, BorderLayout.SOUTH);
    return contentPane;
  }

  private JPanel createQuerySelectionPanel()
  {
    final QueryRemoveAction removeQueryAction = new QueryRemoveAction(queries);

    final JPanel queryListButtonsPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    queryListButtonsPanel.add(new BorderlessButton(new QueryAddAction(queries)));
    queryListButtonsPanel.add(new BorderlessButton(removeQueryAction));


    final JPanel queryListDetailsPanel = new JPanel(new BorderLayout());
    queryListDetailsPanel.add(new JLabel(Messages.getString("SequenceDataSourceEditor.QueryDetailsLabel")), BorderLayout.WEST);
    queryListDetailsPanel.add(queryListButtonsPanel, BorderLayout.EAST);

    // Create the query list panel
    final JPanel queryListPanel = new JPanel(new BorderLayout());
    queryListPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 5));
    queryListPanel.add(BorderLayout.NORTH, queryListDetailsPanel);
    queryListPanel.add(BorderLayout.CENTER, new JScrollPane(queryNameList));
    return queryListPanel;
  }

  public SequenceDataFactory performConfiguration(final DesignTimeContext context,
                                                  final SequenceDataFactory dataFactory,
                                                  final String selectedQuery)
  {

    this.designTimeContext = context;
    if (this.designTimeContext != null)
    {
      sequenceEditor.applyLocaleSettings(context.getLocaleSettings());
    }

    if (dataFactory != null)
    {
      final String[] queryNames = dataFactory.getQueryNames();
      for (int i = 0; i < queryNames.length; i++)
      {
        final String queryName = queryNames[i];
        final Sequence query = dataFactory.getSequence(queryName);
        queries.addQuery(queryName, query);
      }
    }

    queries.setSelectedQuery(selectedQuery);
    if (performEdit() == false)
    {
      return null;
    }

    sequenceEditor.stopEditing();

    final SequenceDataFactory retval = new SequenceDataFactory();
    for (final DataSetQuery<Sequence> query : this.queries.getQueries())
    {
      retval.addSequence(query.getQueryName(), query.getQuery());
    }
    return retval;
  }

  public static void main(String[] args)
  {
    ClassicEngineBoot.getInstance().start();
    SequenceDataSourceEditor ed = new SequenceDataSourceEditor();
    ed.performConfiguration(new DefaultDesignTimeContext(new MasterReport()), null, null);
  }
}
TOP

Related Classes of org.pentaho.reporting.ui.datasources.sequence.SequenceDataSourceEditor$SequenceChangeHandler

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.