Package org.pentaho.reporting.tools.configeditor.editor

Source Code of org.pentaho.reporting.tools.configeditor.editor.AbstractKeyEditor

/*
* 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) 2001 - 2009 Object Refinery Ltd, Pentaho Corporation and Contributors.  All rights reserved.
*/

package org.pentaho.reporting.tools.configeditor.editor;

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.pentaho.reporting.libraries.base.config.Configuration;
import org.pentaho.reporting.libraries.base.config.HierarchicalConfiguration;
import org.pentaho.reporting.libraries.base.util.ResourceBundleSupport;
import org.pentaho.reporting.tools.configeditor.ConfigEditorBoot;
import org.pentaho.reporting.tools.configeditor.Messages;
import org.pentaho.reporting.tools.configeditor.model.ConfigDescriptionEntry;

/**
* This key editor class is the base class for all key editor components. It provides common services usable for most
* key editor implementation.
*
* @author Thomas Morgner
*/
public abstract class AbstractKeyEditor extends JComponent implements KeyEditor
{
  /**
   * A constant for the "validInput" property name.
   */
  public static final String VALID_INPUT_PROPERTY = "validInput"; //$NON-NLS-1$

  /**
   * The error icon used for the key editors.
   */
  private Icon errorIcon;
  /**
   * The empty icon used for the key editors.
   */
  private Icon emptyIcon;

  /**
   * The report configuration that provides the values for this editor.
   */
  private final HierarchicalConfiguration config;
  /**
   * The config description entry that provides the definition for this key.
   */
  private final ConfigDescriptionEntry entry;
  /**
   * A flag indicating whether the input is valid.
   */
  private boolean validInput;
  /**
   * A label that holds the error indicator icons.
   */
  private final JLabel stateLabel;
  /**
   * the resource bundle instance used to translate the text.
   */
  private final ResourceBundleSupport resources;

  /**
   * Creates a new key editor for the given report configuration and key entry.
   *
   * @param config the report configuration that supplies the value for the editor
   * @param entry  the entry description provides the meta data for the edited key.
   */
  protected AbstractKeyEditor(final HierarchicalConfiguration config,
                              final ConfigDescriptionEntry entry)
  {
    this.resources = Messages.getInstance();
    this.setLayout(new BorderLayout());
    this.config = config;
    this.entry = entry;
    stateLabel = new JLabel(getEmptyIcon());
  }

  /**
   * Returns the empty icon for this an all derived editors.
   *
   * @return the empty icon.
   */
  protected Icon getEmptyIcon()
  {
    if (emptyIcon == null)
    {
      final Icon errorIcon = getErrorIcon();
      final int width = errorIcon.getIconWidth();
      final int height = errorIcon.getIconHeight();

      final BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
      emptyIcon = new ImageIcon(bi);
    }
    return emptyIcon;
  }

  /**
   * Returns the error icon for this an all derived editors.
   *
   * @return the error icon.
   */
  protected Icon getErrorIcon()
  {
    if (errorIcon == null)
    {
      errorIcon = resources.getIcon("default-editor.error-icon"); //$NON-NLS-1$
    }
    return errorIcon;
  }

  /**
   * Defines the content pane for this editor.
   *
   * @param contentPane the new content pane
   */
  protected void setContentPane(final JPanel contentPane)
  {
    removeAll();
    add(contentPane, BorderLayout.CENTER);
    add(stateLabel, BorderLayout.EAST);
  }

  /**
   * Returns the report configuration instance used for this editor.
   *
   * @return the report configuration instance of this editor.
   */
  public Configuration getConfig()
  {
    return config;
  }

  /**
   * Returns the config description entry of this editor.
   *
   * @return the config description entry.
   */
  public ConfigDescriptionEntry getEntry()
  {
    return entry;
  }

  /**
   * Loads the value from the configuration.
   *
   * @return the value of the edited key from the configuration.
   */
  protected String loadValue()
  {
    return config.getConfigProperty(entry.getKeyName());
  }

  /**
   * Stores the value to the configuration.
   *
   * @param o the new value for the key of the editor.
   */
  protected void storeValue(final String o)
  {
    config.setConfigProperty(entry.getKeyName(), o);
  }

  /**
   * Removes the value from the configuration; the configuration will fall back to the default value from the global
   * configuration.
   * <p/>
   * Deleting the value triggers the <code>isDefined</code> property.
   */
  protected void deleteValue()
  {
    config.setConfigProperty(entry.getKeyName(), null);
  }

  /**
   * Returns true, if the component validated the entered values, false otherwise.
   *
   * @return true, if the input is valid, false otherwise.
   */
  public boolean isValidInput()
  {
    return validInput;
  }

  /**
   * Defines, whether the input is valid. This should be called after the value of the component changed.
   *
   * @param validInput true, if the input should be considered valid, false otherwise.
   */
  protected void setValidInput(final boolean validInput)
  {
    if (this.validInput != validInput)
    {
      final boolean oldValue = this.validInput;
      this.validInput = validInput;
      firePropertyChange(AbstractKeyEditor.VALID_INPUT_PROPERTY, oldValue, validInput);
      if (this.validInput == false)
      {
        stateLabel.setIcon(getErrorIcon());
      }
      else
      {
        stateLabel.setIcon(getEmptyIcon());
      }
    }
  }

  /**
   * Checks whether the local key has a defined value in the local report configuration.
   *
   * @return true, if the key is defined, false otherwise.
   */
  public boolean isDefined()
  {
    return config.isLocallyDefined(entry.getKeyName());
  }

  /**
   * Returns the editor component; this implementation returns the "this" reference.
   *
   * @return a reference to this object.
   */
  public JComponent getComponent()
  {
    return this;
  }
}
TOP

Related Classes of org.pentaho.reporting.tools.configeditor.editor.AbstractKeyEditor

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.