net.sf.jasperreports.engine.design.JRDesignFrame Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasperreports Show documentation
Show all versions of jasperreports Show documentation
Free Java Reporting Library
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2022 TIBCO Software Inc. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
package net.sf.jasperreports.engine.design;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRChild;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRDefaultStyleProvider;
import net.sf.jasperreports.engine.JRElement;
import net.sf.jasperreports.engine.JRElementGroup;
import net.sf.jasperreports.engine.JRExpressionCollector;
import net.sf.jasperreports.engine.JRFrame;
import net.sf.jasperreports.engine.JRLineBox;
import net.sf.jasperreports.engine.JRVisitor;
import net.sf.jasperreports.engine.base.JRBaseElementGroup;
import net.sf.jasperreports.engine.base.JRBaseLineBox;
import net.sf.jasperreports.engine.type.BorderSplitType;
import net.sf.jasperreports.engine.type.ModeEnum;
import net.sf.jasperreports.engine.util.ElementsVisitorUtils;
/**
* Implementation of {@link net.sf.jasperreports.engine.JRFrame JRFrame} to be used at design time.
*
* @author Lucian Chirita ([email protected])
*/
public class JRDesignFrame extends JRDesignElement implements JRFrame
{
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
/*
* Frame properties
*/
public static final String PROPERTY_CHILDREN = "children";
public static final String PROPERTY_BORDER_SPLIT_TYPE = "borderSplitType";
private List children;
private JRLineBox lineBox;
private BorderSplitType borderSplitType;
/**
* Creates a new frame object.
*
* @param defaultStyleProvider default style provider instance
*/
public JRDesignFrame(JRDefaultStyleProvider defaultStyleProvider)
{
super(defaultStyleProvider);
children = new ArrayList<>();
lineBox = new JRBaseLineBox(this);
}
/**
* Creates a new frame object.
*/
public JRDesignFrame()
{
this(null);
}
@Override
public void collectExpressions(JRExpressionCollector collector)
{
collector.collect(this);
}
@Override
public void visit(JRVisitor visitor)
{
visitor.visitFrame(this);
if (ElementsVisitorUtils.visitDeepElements(visitor))
{
ElementsVisitorUtils.visitElements(visitor, children);
}
}
@Override
public JRElement[] getElements()
{
return JRBaseElementGroup.getElements(children);
}
/**
* Adds a sub element to the frame.
*
* @param element the element to add
*/
public void addElement(JRElement element)
{
addElement(children.size(), element);
}
/**
* Inserts a sub element at specified position into the frame.
*
* @param index the element position
* @param element the element to add
*/
public void addElement(int index, JRElement element)
{
if (element instanceof JRDesignElement)
{
((JRDesignElement) element).setElementGroup(this);
}
children.add(index, element);
getEventSupport().fireCollectionElementAddedEvent(PROPERTY_CHILDREN, element, index);
}
/**
* Removes a sub element from the frame.
*
* @param element the element to remove
* @return true if this frame contained the specified element
*/
public boolean removeElement(JRElement element)
{
if (element instanceof JRDesignElement)
{
((JRDesignElement) element).setElementGroup(null);
}
int idx = children.indexOf(element);
if (idx >= 0)
{
children.remove(idx);
getEventSupport().fireCollectionElementRemovedEvent(PROPERTY_CHILDREN, element, idx);
return true;
}
return false;
}
/**
* Adds an element group to the frame.
*
* @param group the element group to add
*/
public void addElementGroup(JRElementGroup group)
{
addElementGroup(children.size(), group);
}
/**
* Inserts an element group at specified position into the frame.
*
* @param index the element group position
* @param group the element group to add
*/
public void addElementGroup(int index, JRElementGroup group)
{
if (group instanceof JRDesignElementGroup)
{
((JRDesignElementGroup) group).setElementGroup(this);
}
children.add(index, group);
getEventSupport().fireCollectionElementAddedEvent(PROPERTY_CHILDREN, group, index);
}
/**
* Removes a group element from the frame.
*
* @param group the group to remove
* @return true if this frame contained the specified group
*/
public boolean removeElementGroup(JRElementGroup group)
{
if (group instanceof JRDesignElementGroup)
{
((JRDesignElementGroup) group).setElementGroup(null);
}
int idx = children.indexOf(group);
if (idx >= 0)
{
children.remove(idx);
getEventSupport().fireCollectionElementRemovedEvent(PROPERTY_CHILDREN, group, idx);
return true;
}
return false;
}
@Override
public List getChildren()
{
return children;
}
@Override
public JRElement getElementByKey(String elementKey)
{
return JRBaseElementGroup.getElementByKey(getElements(), elementKey);
}
@Override
public ModeEnum getModeValue()
{
return getStyleResolver().getMode(this, ModeEnum.TRANSPARENT);
}
@Override
public JRLineBox getLineBox()
{
return lineBox;
}
/**
*
*/
public void copyBox(JRLineBox lineBox)
{
this.lineBox = lineBox.clone(this);
}
@Override
public Color getDefaultLineColor()
{
return getForecolor();
}
@Override
public BorderSplitType getBorderSplitType()
{
return borderSplitType;
}
/**
* Sets the border split type for the frame.
*
* @param borderSplitType the border split type
* @see JRFrame#getBorderSplitType()
*/
public void setBorderSplitType(BorderSplitType borderSplitType)
{
Object old = this.borderSplitType;
this.borderSplitType = borderSplitType;
getEventSupport().firePropertyChange(PROPERTY_BORDER_SPLIT_TYPE, old, this.borderSplitType);
}
@Override
public Object clone()
{
JRDesignFrame clone = (JRDesignFrame)super.clone();
if (children != null)
{
clone.children = new ArrayList<>(children.size());
for(int i = 0; i < children.size(); i++)
{
clone.children.add((JRChild)(children.get(i).clone(clone)));
}
}
clone.lineBox = lineBox.clone(clone);
return clone;
}
}