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

Source Code of org.pentaho.reporting.ui.datasources.sequence.SequenceEditor$SelectGroupAction

/*!
* 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.util.Locale;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.table.TableCellEditor;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.modules.misc.datafactory.sequence.Sequence;
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.KeyedComboBoxModel;
import org.pentaho.reporting.libraries.designtime.swing.VerticalLayout;
import org.pentaho.reporting.libraries.designtime.swing.settings.LocaleSettings;
import org.pentaho.reporting.libraries.designtime.swing.table.PropertyTable;

public class SequenceEditor extends JComponent
{
  private static Log logger = LogFactory.getLog(SequenceEditor.class);

  private class SelectGroupAction implements ListDataListener
  {
    private SelectGroupAction()
    {
    }

    public void intervalAdded(final ListDataEvent e)
    {

    }

    public void intervalRemoved(final ListDataEvent e)
    {

    }

    public void contentsChanged(final ListDataEvent e)
    {
      if (disableSequenceUpdate)
      {
        return;
      }

      logger.debug("start SequenceGroupContentChange: " + disableSequenceUpdate);
      disableSequenceUpdate = true;
      sequenceGroupSelected();
      sequenceSelected();
      disableSequenceUpdate = false;
      logger.debug("end SequenceGroupContentChange: " + disableSequenceUpdate);
    }
  }

  private class SequenceSelectionHandler implements ListDataListener
  {
    public void intervalAdded(final ListDataEvent e)
    {

    }

    public void intervalRemoved(final ListDataEvent e)
    {

    }

    public void contentsChanged(final ListDataEvent e)
    {
      if (disableSequenceUpdate)
      {
        return;
      }

      logger.debug("start SequenceContentChange: " + disableSequenceUpdate);
      disableSequenceUpdate = true;
      sequenceSelected();
      disableSequenceUpdate = false;
      logger.debug("end SequenceGroupContentChange: " + disableSequenceUpdate);
    }
  }

  private Sequence sequence;
  private JComboBox sequenceGroupBox;
  private JComboBox sequenceNameBox;
  private PropertyTable propertyTable;
  private SequenceRegistry registry;
  private KeyedComboBoxModel<Sequence, String> sequenceModel;
  private SequencePropertyTableModel propertyTableModel;
  private boolean disableSequenceUpdate;

  public SequenceEditor()
  {
    registry = new SequenceRegistry();
    setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

    final DefaultComboBoxModel groupModel = new DefaultComboBoxModel(registry.getSequenceGroups(Locale.getDefault()));
    groupModel.addListDataListener(new SelectGroupAction());
    sequenceGroupBox = new JComboBox();
    sequenceGroupBox.setModel(groupModel);

    sequenceModel = new KeyedComboBoxModel<Sequence, String>();
    sequenceModel.addListDataListener(new SequenceSelectionHandler());
    sequenceNameBox = new JComboBox(sequenceModel);

    propertyTableModel = new SequencePropertyTableModel();
    propertyTable = new PropertyTable();
    propertyTable.setModel(propertyTableModel);

    final JPanel headerPanel = new JPanel();
    headerPanel.setLayout(new VerticalLayout(5, VerticalLayout.BOTH));
    headerPanel.add(new JLabel(Messages.getString("SequenceEditor.Group")));
    headerPanel.add(sequenceGroupBox);
    headerPanel.add(new JLabel(Messages.getString("SequenceEditor.Sequence")));
    headerPanel.add(sequenceNameBox);

    setLayout(new BorderLayout());
    add(new JScrollPane(propertyTable), BorderLayout.CENTER);
    add(headerPanel, BorderLayout.NORTH);

    setSequence(null);
  }

  public void applyLocaleSettings(final LocaleSettings localeSettings)
  {
    propertyTable.applyLocaleSettings(localeSettings);
  }

  public Sequence getSequence()
  {
    return sequence;
  }

  public void setSequence(final Sequence sequence)
  {
    final Sequence oldSequence = this.sequence;

    final boolean oldDisableSequenceUpdateValue = disableSequenceUpdate;
    logger.debug("start: setSequence: " + sequence);
    try
    {
      disableSequenceUpdate = true;

      this.sequence = sequence;
      this.propertyTableModel.setSequence(sequence);
      if (sequence == null)
      {
        sequenceGroupBox.setEnabled(false);
        sequenceNameBox.setEnabled(false);
        propertyTable.setEnabled(false);

        if (sequenceGroupBox.getItemCount() > 0)
        {
          sequenceGroupBox.setSelectedIndex(0);
          logger.debug("   : setSequence: Setting sequencegroup to first.");
          sequenceGroupSelected();
        }
        if (sequenceNameBox.getItemCount() > 0)
        {
          sequenceNameBox.setSelectedIndex(0);
          logger.debug("   : setSequence: Setting sequence to first in group.");
        }
        return;
      }

      sequenceGroupBox.setEnabled(true);
      sequenceNameBox.setEnabled(true);
      propertyTable.setEnabled(true);

      final SequenceDescription de = sequence.getSequenceDescription();
      final String group = de.getSequenceGroup(Locale.getDefault());
      sequenceGroupBox.setSelectedItem(group);
      logger.debug("   : setSequence: Setting sequencegroup to: " + group);
      sequenceGroupSelected();

      final String displayName = de.getDisplayName(Locale.getDefault());
      sequenceModel.setSelectedValue(displayName);
      logger.debug("   : setSequence: Setting sequence to: " + displayName);
    }
    finally
    {
      disableSequenceUpdate = oldDisableSequenceUpdateValue;
    }
    logger.debug("end: setSequence: " + sequence);
    firePropertyChange("sequence", oldSequence, this.sequence);
  }

  protected void sequenceGroupSelected()
  {
    logger.debug("sequenceGroupSelected() called. Updating sequences");
    final Object selectedItem = sequenceGroupBox.getSelectedItem();
    if (selectedItem == null)
    {
      return;
    }

    final String selectedGroup = String.valueOf(selectedItem);
    final SequenceDescription[] sequences = registry.getSequencesForGroup(selectedGroup, Locale.getDefault());
    sequenceModel.clear();
    for (final SequenceDescription description : sequences)
    {
      final String displayName = description.getDisplayName(Locale.getDefault());
      sequenceModel.add(description.newInstance(), displayName);
    }
    if (sequences.length > 0)
    {
      sequenceModel.setSelectedKey(sequenceModel.getKeyAt(0));
    }
  }

  protected void sequenceSelected()
  {
    setSequence(sequenceModel.getSelectedKey());
  }

  public void stopEditing ()
  {
    final TableCellEditor cellEditor = propertyTable.getCellEditor();
    if (cellEditor != null)
    {
      cellEditor.stopCellEditing();
    }
  }
}
TOP

Related Classes of org.pentaho.reporting.ui.datasources.sequence.SequenceEditor$SelectGroupAction

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.