/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. 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 <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.engine.base;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.sf.jasperreports.crosstabs.JRCrosstab;
import net.sf.jasperreports.engine.JRChild;
import net.sf.jasperreports.engine.JRConstants;
import net.sf.jasperreports.engine.JRElement;
import net.sf.jasperreports.engine.JRElementGroup;
import net.sf.jasperreports.engine.JRFrame;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JRVisitor;
/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRBaseElementGroup.java 3939 2010-08-20 09:52:00Z teodord $
*/
public class JRBaseElementGroup implements JRElementGroup, Serializable
{
/**
*
*/
private static final long serialVersionUID = JRConstants.SERIAL_VERSION_UID;
/**
*
*/
protected List children = new ArrayList();
protected JRElementGroup elementGroup;
/**
*
*/
protected JRBaseElementGroup()
{
}
/**
*
*/
protected JRBaseElementGroup(JRElementGroup elementGrp, JRBaseObjectFactory factory)
{
factory.put(elementGrp, this);
/* */
List list = elementGrp.getChildren();
if (list != null && list.size() > 0)
{
for(int i = 0; i < list.size(); i++)
{
JRChild child = (JRChild)list.get(i);
child = (JRChild)factory.getVisitResult(child);
children.add(child);
}
}
this.elementGroup = (JRElementGroup)factory.getVisitResult(elementGrp.getElementGroup());
}
/**
*
*/
public List getChildren()
{
return this.children;
}
/**
*
*/
public JRElementGroup getElementGroup()
{
return this.elementGroup;
}
/**
*
*/
public static JRElement[] getElements(List children)
{
JRElement[] elements = null;
if (children != null)
{
List allElements = new ArrayList();
Object child = null;
JRElement[] childElementArray = null;
for(int i = 0; i < children.size(); i++)
{
child = children.get(i);
if (child instanceof JRElement)
{
allElements.add(child);
}
else if (child instanceof JRElementGroup)
{
childElementArray = ((JRElementGroup)child).getElements();
if (childElementArray != null)
{
allElements.addAll( Arrays.asList(childElementArray) );
}
}
}
elements = new JRElement[allElements.size()];
allElements.toArray(elements);
}
return elements;
}
public JRElement[] getElements()
{
return getElements(children);
}
/**
*
*/
public static JRElement getElementByKey(JRElement[] elements, String key)
{
JRElement element = null;
if (key != null)
{
if (elements != null)
{
int i = 0;
while (element == null && i < elements.length)
{
JRElement elem = elements[i];
if (key.equals(elem.getKey()))
{
element = elem;
}
else if (elem instanceof JRFrame)
{
element = ((JRFrame) elem).getElementByKey(key);
}
else if (elem instanceof JRCrosstab)
{
element = ((JRCrosstab) elem).getElementByKey(key);
}
i++;
}
}
}
return element;
}
public JRElement getElementByKey(String key)
{
return getElementByKey(getElements(), key);
}
/**
*
*/
public void visit(JRVisitor visitor)
{
visitor.visitElementGroup(this);
}
/**
*
*/
public Object clone()
{
JRBaseElementGroup clone = null;
try
{
clone = (JRBaseElementGroup)super.clone();
}
catch (CloneNotSupportedException e)
{
throw new JRRuntimeException(e);
}
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));
}
}
return clone;
}
/**
*
*/
public Object clone(JRElementGroup parentGroup)
{
JRBaseElementGroup clone = (JRBaseElementGroup)this.clone();
clone.elementGroup = parentGroup;
return clone;
}
}