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

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

/*!
* 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.GridLayout;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.pentaho.reporting.designer.core.Messages;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.designer.core.util.ExpressionEditorPane;
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;

/**
* A panel to facilitate classic style linking which allows to use both static values and all existing expressions.
*
* @author Thomas Morgner.
*/
public class BasicLinkPanel extends JPanel
{
  private ExpressionEditorPane targetFormula;
  private JTextField targetField;
  private ExpressionEditorPane titleFormula;
  private ExpressionEditorPane windowFormula;
  private JComboBox windowComboBox;
  private JTextField titleField;

  public BasicLinkPanel()
  {
    targetField = new JTextField();
    targetFormula = new ExpressionEditorPane();
    windowComboBox = new JComboBox(new String[]{"", "_blank", "_self", "_parent", "_top"}); // NON-NLS
    windowComboBox.setEditable(true);
   
    titleField = new JTextField();
    titleFormula = new ExpressionEditorPane();
    windowFormula = new ExpressionEditorPane();
   
    setLayout(new BorderLayout()) ;
   
    final JPanel theMainPanel = new JPanel();
    theMainPanel.setLayout(new GridLayout(3, 1));
    theMainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
   
    final JPanel theUpperMainPanel = new JPanel();
    theUpperMainPanel.setLayout(new BorderLayout());
    theUpperMainPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("HyperlinkPropertiesPane.Link")));  
    final JPanel theUpperPanel = new JPanel();
    theUpperPanel.setLayout(new GridLayout(4,1));
    theUpperPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    theUpperPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Value")));
    theUpperPanel.add(targetField);
    theUpperPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Formula")));
    theUpperPanel.add(targetFormula);
    theUpperMainPanel.add(theUpperPanel, BorderLayout.CENTER);
    theMainPanel.add(theUpperMainPanel);
   
    final JPanel theMidMainPanel = new JPanel();
    theMidMainPanel.setLayout(new BorderLayout());
    theMidMainPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("HyperlinkPropertiesPane.Title")));
    final JPanel theMidPanel = new JPanel();
    theMidPanel.setLayout(new GridLayout(4,1));
    theMidPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    theMidPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Value")));
    theMidPanel.add(titleField);
    theMidPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Formula")));
    theMidPanel.add(titleFormula);   
    theMidMainPanel.add(theMidPanel, BorderLayout.CENTER);
    theMainPanel.add(theMidMainPanel);
   
    final JPanel theBottomMainPanel = new JPanel();
    theBottomMainPanel.setLayout(new BorderLayout());
    theBottomMainPanel.setBorder(BorderFactory.createTitledBorder(Messages.getString("HyperlinkPropertiesPane.Window")));
    final JPanel theBottomPanel = new JPanel();
    theBottomPanel.setLayout(new GridLayout(4,1));
    theBottomPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
    theBottomPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Value")));
    theBottomPanel.add(windowComboBox);
    theBottomPanel.add(new JLabel(Messages.getString("HyperlinkPropertiesPane.Formula")));
    theBottomPanel.add(windowFormula);    
    theBottomMainPanel.add(theBottomPanel, BorderLayout.CENTER);
    theMainPanel.add(theBottomMainPanel);
  
    add(theMainPanel, BorderLayout.NORTH);
  }

  public void commitValues(final ElementStyleSheet styleSheet, final Map<StyleKey, Expression> styleExpressions)
  {
    if (styleExpressions == null)
    {
      throw new NullPointerException();
    }

    final Expression formulaValue = targetFormula.getValue();
    if (formulaValue != null)
    {
      styleExpressions.put(ElementStyleKeys.HREF_TARGET, formulaValue);
    }
    else
    {
      styleExpressions.remove(ElementStyleKeys.HREF_TARGET);
    }

    final String targetRawValue = targetField.getText();
    if (targetRawValue.trim().length() > 0)
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TARGET, targetRawValue);
    }
    else
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TARGET, null);
    }


    final Expression windowFormulaValue = windowFormula.getValue();
    if (windowFormulaValue != null)
    {
      styleExpressions.put(ElementStyleKeys.HREF_WINDOW, windowFormulaValue);
    }
    else
    {
      styleExpressions.remove(ElementStyleKeys.HREF_WINDOW);
    }

    final String windowValueRaw = (String) windowComboBox.getSelectedItem();
    if (StringUtils.isEmpty(windowValueRaw, true) == false)
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_WINDOW, windowValueRaw);
    }
    else
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_WINDOW, null);
    }

    final Expression titleFormulaValue = titleFormula.getValue();
    if (titleFormulaValue != null)
    {
      styleExpressions.put(ElementStyleKeys.HREF_TITLE, titleFormulaValue);
    }
    else
    {
      styleExpressions.remove(ElementStyleKeys.HREF_TITLE);
    }

    final String titleValueRaw = titleField.getText();
    if (StringUtils.isEmpty(titleValueRaw, true) == false)
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TITLE, titleValueRaw);
    }
    else
    {
      styleSheet.setStyleProperty(ElementStyleKeys.HREF_TITLE, null);
    }
  }

  public void initializeFromStyle(final ElementStyleSheet styleSheet,
                                  final Map styleExpressions,
                                  final ReportDesignerContext renderContext)
  {
    targetFormula.setReportDesignerContext(renderContext);
    windowFormula.setReportDesignerContext(renderContext);
    titleFormula.setReportDesignerContext(renderContext);

    if (styleExpressions.containsKey(ElementStyleKeys.HREF_TARGET))
    {
      targetFormula.setValue((Expression) styleExpressions.get(ElementStyleKeys.HREF_TARGET));
      targetField.setText("");
    }
    else
    {
      targetField.setText((String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_TARGET));
      targetFormula.setValue(null);
    }

    if (styleExpressions.containsKey(ElementStyleKeys.HREF_WINDOW))
    {
      windowFormula.setValue((Expression) styleExpressions.get(ElementStyleKeys.HREF_WINDOW));
      windowComboBox.setSelectedIndex(-1);
    }
    else
    {
      windowComboBox.setSelectedItem(styleSheet.getStyleProperty(ElementStyleKeys.HREF_WINDOW));
      windowFormula.setValue(null);
    }

    if (styleExpressions.containsKey(ElementStyleKeys.HREF_TITLE))
    {
      titleFormula.setValue((Expression) styleExpressions.get(ElementStyleKeys.HREF_TITLE));
      titleField.setText("");
    }
    else
    {
      titleField.setText((String) styleSheet.getStyleProperty(ElementStyleKeys.HREF_TITLE));
      titleFormula.setValue(null);
    }

  }

  public String getFormulaText()
  {
    final Expression value = targetFormula.getValue();
    if (value instanceof FormulaExpression)
    {
      final FormulaExpression formulaExpression = (FormulaExpression) value;
      return formulaExpression.getFormula();
    }
    return null;
  }

  public void setFormulaText(final String text)
  {
    if (StringUtils.isEmpty(text, true))
    {
      return;
    }

    if (text.equals(getFormulaText()))
    {
      return;
    }

    final FormulaExpression fe = new FormulaExpression();
    fe.setFormula(text);
    targetFormula.setValue(fe);

  }

  public boolean isEmpty()
  {
    return targetFormula.getValue() == null && StringUtils.isEmpty(targetField.getText(), true);
  }
}
TOP

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

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.