Package org.pentaho.reporting.designer.core.editor.drilldown

Source Code of org.pentaho.reporting.designer.core.editor.drilldown.HyperlinkEditorPane

/*!
* 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.designer.core.editor.drilldown;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Map;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.pentaho.openformula.ui.FieldDefinition;
import org.pentaho.reporting.designer.core.Messages;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.engine.classic.core.function.Expression;
import org.pentaho.reporting.engine.classic.core.function.FormulaExpression;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleSheet;
import org.pentaho.reporting.engine.classic.core.style.StyleKey;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.libraries.formula.util.FormulaUtil;

public class HyperlinkEditorPane extends JPanel
{
  private class DrillDownItemListener implements ChangeListener
  {
    private DrillDownItemListener()
    {
    }

    /**
     * Invoked when the target of the listener has changed its state.
     *
     * @param e a ChangeEvent object
     */
    public void stateChanged(final ChangeEvent e)
    {
      final DrillDownUiProfile uiProfile = drillDownSelector.getSelectedProfile();
      drillDownEditor.setDrillDownUiProfile(uiProfile);
      if (uiProfile == null)
      {
        drillDownEditor.setEnabled(false);
        basicLinkPanel.setEnabled(true);
        cardLayout.last(cardHolder);
      }
      else
      {
        drillDownEditor.setEnabled(true);
        basicLinkPanel.setEnabled(false);
        cardLayout.first(cardHolder);
      }
    }
  }

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

    /**
     * This method gets called when a bound property is changed.
     *
     * @param evt A PropertyChangeEvent object describing the event source
     *            and the property that has changed.
     */
    public void propertyChange(final PropertyChangeEvent evt)
    {
      if (DrillDownEditor.DRILL_DOWN_UI_PROFILE_PROPERTY.equals(evt.getPropertyName()) == false)
      {
        return;
      }

      drillDownSelector.setSelectedProfile(drillDownEditor.getDrillDownUiProfile());

    }
  }

  private DrillDownSelector drillDownSelector;
  private DrillDownEditor drillDownEditor;
  private JPanel cardHolder;
  private BasicLinkPanel basicLinkPanel;
  private CardLayout cardLayout;

  public HyperlinkEditorPane()
  {
    drillDownSelector = new ComboBoxSelector(true);
    drillDownSelector.addChangeListener(new DrillDownItemListener());


    drillDownEditor = new DrillDownEditor();
    drillDownEditor.addPropertyChangeListener
        (DrillDownEditor.DRILL_DOWN_UI_PROFILE_PROPERTY, new DrillDownProfileChangeHandler());
    basicLinkPanel = new BasicLinkPanel();

    cardLayout = new CardLayout();

    cardHolder = new JPanel();
    cardHolder.setLayout(cardLayout);
    cardHolder.add("2", drillDownEditor);
    cardHolder.add("1", basicLinkPanel);

    final JPanel selectorPanel = new JPanel();
    selectorPanel.setBorder(new EmptyBorder(6, 6, 6, 6));
    selectorPanel.setLayout(new BorderLayout());
    selectorPanel.add(new JLabel(Messages.getString("HyperlinkEditorPane.Location")), BorderLayout.NORTH);
    selectorPanel.add(drillDownSelector.getComponent(), BorderLayout.WEST);

    setLayout(new BorderLayout());
    add(selectorPanel, BorderLayout.NORTH);
    add(cardHolder, BorderLayout.CENTER);
  }


  public void initializeFromStyle(final ElementStyleSheet styleSheet,
                                  final Map<StyleKey, Expression> styleExpressions,
                                  final ReportDesignerContext designerContext)
  {
    basicLinkPanel.initializeFromStyle(styleSheet, styleExpressions, designerContext);

    final String targetFormula = computeFormula
        (styleExpressions.get(ElementStyleKeys.HREF_WINDOW),
            (String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_WINDOW));
    final String tooltipFormula = computeFormula
        (styleExpressions.get(ElementStyleKeys.HREF_TITLE),
            (String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_TITLE));

    final String formula = computeFormula
        (styleExpressions.get(ElementStyleKeys.HREF_TARGET));
    final boolean initializedWithDrillDown =
        drillDownEditor.initialize(designerContext, formula, tooltipFormula, targetFormula, new String[0]);
    if (basicLinkPanel.isEmpty() == false && initializedWithDrillDown == false)
    {
      drillDownSelector.setSelectedProfile(null);
    }
  }

  private String computeFormula(final Expression expression)
  {
    if (expression instanceof FormulaExpression)
    {
      final FormulaExpression formulaExpression = (FormulaExpression) expression;
      return formulaExpression.getFormula();
    }
    if (expression == null)
    {
      return null;
    }
    return null;
  }

  private String computeFormula(final Expression expression, final String staticValue)
  {
    if (expression instanceof FormulaExpression)
    {
      final FormulaExpression formulaExpression = (FormulaExpression) expression;
      return formulaExpression.getFormula();
    }
    if (expression == null &&
        StringUtils.isEmpty(staticValue) == false)
    {
      return '=' + FormulaUtil.quoteString(staticValue);
    }
    return null;
  }


  public void commitValues(final ElementStyleSheet styleSheet, final Map<StyleKey, Expression> styleExpressions)
  {
    basicLinkPanel.commitValues(styleSheet, styleExpressions);

    if (drillDownSelector.getSelectedProfile() == null)
    {
      return;
    }

    final String formulaText = drillDownEditor.getDrillDownFormula();
    if (StringUtils.isEmpty(formulaText) == false)
    {
      final FormulaExpression formulaExpression = new FormulaExpression();
      formulaExpression.setFormula(formulaText);
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TARGET, null);
      styleExpressions.put(ElementStyleKeys.HREF_TARGET, formulaExpression);
    }
    else
    {
      styleExpressions.put(ElementStyleKeys.HREF_TARGET, null);
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TARGET, null);
    }

    final String targetText = drillDownEditor.getTargetFormula();
    if (StringUtils.isEmpty(targetText) == false)
    {
      final String staticText = FormulaUtil.extractStaticTextFromFormula(targetText);
      if (staticText != null)
      {
        styleSheet.setStyleProperty(ElementStyleKeys.HREF_WINDOW, staticText);
        styleExpressions.put(ElementStyleKeys.HREF_WINDOW, null);
      }
      else
      {
        final FormulaExpression formulaExpression = new FormulaExpression();
        formulaExpression.setFormula(targetText);
        styleSheet.setStyleProperty(ElementStyleKeys.HREF_WINDOW, null);
        styleExpressions.put(ElementStyleKeys.HREF_WINDOW, formulaExpression);
      }
    }
    else
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_WINDOW, null);
      styleExpressions.put(ElementStyleKeys.HREF_WINDOW, null);
    }

    final String tooltipText = drillDownEditor.getTooltipFormula();
    if (StringUtils.isEmpty(tooltipText) == false)
    {
      final String staticText = FormulaUtil.extractStaticTextFromFormula(tooltipText);
      if (staticText != null)
      {
        styleSheet.setStyleProperty(ElementStyleKeys.HREF_TITLE, staticText);
        styleExpressions.put(ElementStyleKeys.HREF_TITLE, null);
      }
      else
      {
        final FormulaExpression formulaExpression = new FormulaExpression();
        formulaExpression.setFormula(tooltipText);
        styleSheet.setStyleProperty(ElementStyleKeys.HREF_TITLE, null);
        styleExpressions.put(ElementStyleKeys.HREF_TITLE, formulaExpression);
      }
    }
    else
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TITLE, null);
      styleExpressions.put(ElementStyleKeys.HREF_TITLE, null);
    }
  }
}
TOP

Related Classes of org.pentaho.reporting.designer.core.editor.drilldown.HyperlinkEditorPane

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.