Package org.pentaho.reporting.designer.editor

Source Code of org.pentaho.reporting.designer.editor.Prd4638Test$MonitorTableListener

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

import java.util.concurrent.Executor;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

import junit.framework.TestCase;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.designer.core.editor.ReportRenderContext;
import org.pentaho.reporting.designer.core.editor.styles.StyleEditorPanel;
import org.pentaho.reporting.designer.core.editor.styles.StyleTableModel;
import org.pentaho.reporting.designer.core.util.table.GroupedName;
import org.pentaho.reporting.designer.testsupport.TestReportDesignerContext;
import org.pentaho.reporting.engine.classic.core.ClassicEngineBoot;
import org.pentaho.reporting.engine.classic.core.Element;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.core.metadata.StyleMetaData;
import org.pentaho.reporting.engine.classic.core.style.ElementStyleKeys;
import org.pentaho.reporting.engine.classic.core.style.StyleKey;

public class Prd4638Test extends TestCase
{
  public Prd4638Test()
  {
  }

  public void setUp()
  {
    ClassicEngineBoot.getInstance().start();
  }

  public void testEventTransition() throws ReportDataFactoryException
  {
    // the report we use for the simulated edit
    final MasterReport report = new MasterReport();
    final Element elementX = new Element();
    elementX.getStyle().setStyleProperty(ElementStyleKeys.POS_Y, 0f);

    report.getReportHeader().addElement(elementX);

    // setup a dummy environment that simulates the setup of a full prd
    final ReportDesignerContext rdc = new TestReportDesignerContext();
    rdc.addMasterReport(report);
    final ReportRenderContext activeContext = rdc.getReportRenderContext(0);
    rdc.setActiveDocument(activeContext);
    assertNotNull(activeContext);

    // use the style editor panel in isolation to make the whole process debuggable ..
    final TestStyleEditorPanel sep = new TestStyleEditorPanel();
    sep.setReportDesignerContext(rdc);

    assertEquals(0, sep.getData().length);
    final Element element = report.getReportHeader().getElement(0);
    assertTrue(activeContext.getSelectionModel().add(element));
    assertEquals(1, sep.getData().length);
    assertEquals(new Float(0), findStyleValue(sep, ElementStyleKeys.POS_Y));

    sep.setRefreshDataCalled(false);
    final MonitorTableListener monitorTableListener = new MonitorTableListener();

    sep.getDataModel().addTableModelListener(monitorTableListener);
    element.getStyle().setStyleProperty(ElementStyleKeys.POS_Y, 10f);
    assertTrue(sep.isRefreshDataCalled());
    assertTrue(monitorTableListener.isEventReceived());

    assertEquals(new Float(10), findStyleValue(sep, ElementStyleKeys.POS_Y));
  }

  private Object findStyleValue(final TestStyleEditorPanel sep,
                              final StyleKey styleKey)
  {
    final StyleTableModel dataModel = sep.getDataModel();
    for (int i = 0; i < dataModel.getRowCount(); i += 1)
    {
      final Object valueAt = dataModel.getValueAt(i, 0);
      if (valueAt instanceof GroupedName == false)
      {
        continue;
      }

      final GroupedName name = (GroupedName) valueAt;
      final StyleMetaData sm = (StyleMetaData) name.getMetaData();
      if (sm != null)
      {
        if (styleKey.equals(sm.getStyleKey()))
        {
          return dataModel.getValueAt(i, 2);
        }
      }
    }
    return null;
  }

  public static class MonitorTableListener implements TableModelListener
  {
    private boolean eventReceived;

    public MonitorTableListener()
    {
    }

    public boolean isEventReceived()
    {
      return eventReceived;
    }

    public void tableChanged(final TableModelEvent e)
    {
      eventReceived = true;
    }
  }

  public static class TestStyleEditorPanel extends StyleEditorPanel
  {
    private boolean refreshDataCalled;

    public TestStyleEditorPanel()
    {
      getDataModel().setSynchronous(true);
    }

    protected StyleTableModel createDataModel()
    {
      return new StyleTableModel(new InlineExecutor());
    }

    public StyleTableModel getDataModel()
    {
      return super.getDataModel();
    }

    public boolean isRefreshDataCalled()
    {
      return refreshDataCalled;
    }

    public void setRefreshDataCalled(final boolean refreshDataCalled)
    {
      this.refreshDataCalled = refreshDataCalled;
    }

    protected void refreshData()
    {
      this.refreshDataCalled = true;
      super.refreshData();
    }
  }

  public static class InlineExecutor implements Executor
  {
    public InlineExecutor()
    {
    }

    public void execute(final Runnable command)
    {
      command.run();
    }
  }
}
TOP

Related Classes of org.pentaho.reporting.designer.editor.Prd4638Test$MonitorTableListener

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.