first commit
This commit is contained in:
143
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillElementGroup.java
Normal file
143
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillElementGroup.java
Normal file
@@ -0,0 +1,143 @@
|
||||
package net.sf.jasperreports.engine.fill;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import net.sf.jasperreports.engine.JRChild;
|
||||
import net.sf.jasperreports.engine.JRElement;
|
||||
import net.sf.jasperreports.engine.JRElementGroup;
|
||||
import net.sf.jasperreports.engine.JRVisitable;
|
||||
import net.sf.jasperreports.engine.JRVisitor;
|
||||
|
||||
public class JRFillElementGroup implements JRElementGroup, JRFillCloneable {
|
||||
protected List children = new ArrayList();
|
||||
|
||||
protected JRElementGroup elementGroup = null;
|
||||
|
||||
protected JRFillElement[] elements = null;
|
||||
|
||||
private JRElement topElementInGroup = null;
|
||||
|
||||
private JRElement bottomElementInGroup = null;
|
||||
|
||||
private int stretchHeightDiff = 0;
|
||||
|
||||
protected JRFillElementGroup(JRElementGroup elementGrp, JRFillObjectFactory factory) {
|
||||
factory.put(elementGrp, this);
|
||||
if (elementGrp != null) {
|
||||
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);
|
||||
}
|
||||
getElements();
|
||||
this.elementGroup = (JRElementGroup)factory.getVisitResult((JRVisitable)elementGrp.getElementGroup());
|
||||
}
|
||||
}
|
||||
|
||||
protected JRFillElementGroup(JRFillElementGroup elementGrp, JRFillCloneFactory factory) {
|
||||
factory.put(elementGrp, this);
|
||||
List list = elementGrp.getChildren();
|
||||
if (list != null)
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
JRFillCloneable child = list.get(i);
|
||||
JRFillCloneable clone = child.createClone(factory);
|
||||
this.children.add(clone);
|
||||
}
|
||||
getElements();
|
||||
this.elementGroup = (JRFillElementGroup)factory.getClone((JRFillElementGroup)elementGrp.getElementGroup());
|
||||
}
|
||||
|
||||
public List getChildren() {
|
||||
return this.children;
|
||||
}
|
||||
|
||||
public JRElementGroup getElementGroup() {
|
||||
return this.elementGroup;
|
||||
}
|
||||
|
||||
public JRElement[] getElements() {
|
||||
if (this.elements == null)
|
||||
if (this.children != null) {
|
||||
List allElements = new ArrayList();
|
||||
Object child = null;
|
||||
JRElement[] childElementArray = null;
|
||||
for (int i = 0; i < this.children.size(); i++) {
|
||||
child = this.children.get(i);
|
||||
if (child instanceof JRFillElement) {
|
||||
allElements.add(child);
|
||||
} else if (child instanceof JRFillElementGroup) {
|
||||
childElementArray = ((JRFillElementGroup)child).getElements();
|
||||
if (childElementArray != null)
|
||||
allElements.addAll(Arrays.asList((Object[])childElementArray));
|
||||
}
|
||||
}
|
||||
this.elements = new JRFillElement[allElements.size()];
|
||||
allElements.toArray(this.elements);
|
||||
}
|
||||
return (JRElement[])this.elements;
|
||||
}
|
||||
|
||||
public JRElement getElementByKey(String key) {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void reset() {
|
||||
this.topElementInGroup = null;
|
||||
}
|
||||
|
||||
protected int getStretchHeightDiff() {
|
||||
if (this.topElementInGroup == null) {
|
||||
this.stretchHeightDiff = 0;
|
||||
setTopBottomElements();
|
||||
JRElement[] allElements = getElements();
|
||||
if (allElements != null && allElements.length > 0) {
|
||||
JRFillElement topElem = null;
|
||||
JRFillElement bottomElem = null;
|
||||
for (int i = 0; i < allElements.length; i++) {
|
||||
JRFillElement element = (JRFillElement)allElements[i];
|
||||
if (element.isToPrint()) {
|
||||
if (topElem == null || (topElem != null && element.getRelativeY() + element.getStretchHeight() < topElem.getRelativeY() + topElem.getStretchHeight()))
|
||||
topElem = element;
|
||||
if (bottomElem == null || (bottomElem != null && element.getRelativeY() + element.getStretchHeight() > bottomElem.getRelativeY() + bottomElem.getStretchHeight()))
|
||||
bottomElem = element;
|
||||
}
|
||||
}
|
||||
if (topElem != null)
|
||||
this.stretchHeightDiff = bottomElem.getRelativeY() + bottomElem.getStretchHeight() - topElem.getRelativeY() - this.bottomElementInGroup.getY() + this.bottomElementInGroup.getHeight() - this.topElementInGroup.getY();
|
||||
if (this.stretchHeightDiff < 0)
|
||||
this.stretchHeightDiff = 0;
|
||||
}
|
||||
}
|
||||
return this.stretchHeightDiff;
|
||||
}
|
||||
|
||||
private void setTopBottomElements() {
|
||||
JRElement[] allElements = getElements();
|
||||
if (allElements != null && allElements.length > 0)
|
||||
for (int i = 0; i < allElements.length; i++) {
|
||||
if (this.topElementInGroup == null || (this.topElementInGroup != null && allElements[i].getY() + allElements[i].getHeight() < this.topElementInGroup.getY() + this.topElementInGroup.getHeight()))
|
||||
this.topElementInGroup = allElements[i];
|
||||
if (this.bottomElementInGroup == null || (this.bottomElementInGroup != null && allElements[i].getY() + allElements[i].getHeight() > this.bottomElementInGroup.getY() + this.bottomElementInGroup.getHeight()))
|
||||
this.bottomElementInGroup = allElements[i];
|
||||
}
|
||||
}
|
||||
|
||||
public void visit(JRVisitor visitor) {
|
||||
visitor.visitElementGroup(this);
|
||||
}
|
||||
|
||||
public JRFillCloneable createClone(JRFillCloneFactory factory) {
|
||||
return new JRFillElementGroup(this, factory);
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Object clone(JRElementGroup parentGroup) {
|
||||
return null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user