120 lines
3.7 KiB
Java
120 lines
3.7 KiB
Java
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.JRElement;
|
|
import net.sf.jasperreports.engine.JRElementGroup;
|
|
import net.sf.jasperreports.engine.JRFrame;
|
|
import net.sf.jasperreports.engine.JRRuntimeException;
|
|
import net.sf.jasperreports.engine.JRVisitable;
|
|
import net.sf.jasperreports.engine.JRVisitor;
|
|
|
|
public class JRBaseElementGroup implements JRElementGroup, Serializable {
|
|
private static final long serialVersionUID = 10200L;
|
|
|
|
protected List children = new ArrayList();
|
|
|
|
protected JRElementGroup elementGroup = null;
|
|
|
|
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 = list.get(i);
|
|
child = (JRChild)factory.getVisitResult((JRVisitable)child);
|
|
this.children.add(child);
|
|
}
|
|
this.elementGroup = (JRElementGroup)factory.getVisitResult((JRVisitable)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((Object[])childElementArray));
|
|
}
|
|
}
|
|
elements = new JRElement[allElements.size()];
|
|
allElements.toArray(elements);
|
|
}
|
|
return elements;
|
|
}
|
|
|
|
public JRElement[] getElements() {
|
|
return getElements(this.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 (this.children != null) {
|
|
clone.children = new ArrayList(this.children.size());
|
|
for (int i = 0; i < this.children.size(); i++)
|
|
clone.children.add(((JRChild)this.children.get(i)).clone(clone));
|
|
}
|
|
return clone;
|
|
}
|
|
|
|
public Object clone(JRElementGroup parentGroup) {
|
|
JRBaseElementGroup clone = (JRBaseElementGroup)clone();
|
|
clone.elementGroup = parentGroup;
|
|
return clone;
|
|
}
|
|
}
|