first commit
This commit is contained in:
463
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillFrame.java
Normal file
463
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillFrame.java
Normal file
@@ -0,0 +1,463 @@
|
||||
package net.sf.jasperreports.engine.fill;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import net.sf.jasperreports.engine.JRBoxContainer;
|
||||
import net.sf.jasperreports.engine.JRCommonElement;
|
||||
import net.sf.jasperreports.engine.JRElement;
|
||||
import net.sf.jasperreports.engine.JRElementGroup;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.JRExpressionCollector;
|
||||
import net.sf.jasperreports.engine.JRFrame;
|
||||
import net.sf.jasperreports.engine.JRLineBox;
|
||||
import net.sf.jasperreports.engine.JRPen;
|
||||
import net.sf.jasperreports.engine.JRPrintElement;
|
||||
import net.sf.jasperreports.engine.JRStyle;
|
||||
import net.sf.jasperreports.engine.JRVisitor;
|
||||
import net.sf.jasperreports.engine.base.JRBaseElementGroup;
|
||||
import net.sf.jasperreports.engine.util.JRBoxUtil;
|
||||
import net.sf.jasperreports.engine.util.JRPenUtil;
|
||||
import net.sf.jasperreports.engine.util.JRStyleResolver;
|
||||
|
||||
public class JRFillFrame extends JRFillElement implements JRFrame {
|
||||
protected final JRFrame parentFrame;
|
||||
|
||||
private JRFillFrameElements frameContainer;
|
||||
|
||||
private Map bottomTemplateFrames;
|
||||
|
||||
private Map topTemplateFrames;
|
||||
|
||||
private Map topBottomTemplateFrames;
|
||||
|
||||
private boolean first;
|
||||
|
||||
private boolean fillBottomBorder;
|
||||
|
||||
private boolean filling;
|
||||
|
||||
public JRFillFrame(JRBaseFiller filler, JRFrame frame, JRFillObjectFactory factory) {
|
||||
super(filler, (JRElement)frame, factory);
|
||||
this.parentFrame = frame;
|
||||
this.frameContainer = new JRFillFrameElements(factory);
|
||||
this.bottomTemplateFrames = new HashMap();
|
||||
this.topTemplateFrames = new HashMap();
|
||||
this.topBottomTemplateFrames = new HashMap();
|
||||
setShrinkable(true);
|
||||
}
|
||||
|
||||
protected JRFillFrame(JRFillFrame frame, JRFillCloneFactory factory) {
|
||||
super(frame, factory);
|
||||
this.parentFrame = frame.parentFrame;
|
||||
this.frameContainer = new JRFillFrameElements(frame.frameContainer, factory);
|
||||
this.bottomTemplateFrames = frame.bottomTemplateFrames;
|
||||
this.topTemplateFrames = frame.topTemplateFrames;
|
||||
this.topBottomTemplateFrames = frame.topBottomTemplateFrames;
|
||||
}
|
||||
|
||||
public byte getMode() {
|
||||
return JRStyleResolver.getMode((JRCommonElement)this, (byte)2);
|
||||
}
|
||||
|
||||
public Color getDefaultLineColor() {
|
||||
return getForecolor();
|
||||
}
|
||||
|
||||
protected void evaluate(byte evaluation) throws JRException {
|
||||
reset();
|
||||
evaluatePrintWhenExpression(evaluation);
|
||||
evaluateProperties(evaluation);
|
||||
if (isPrintWhenExpressionNull() || isPrintWhenTrue()) {
|
||||
this.frameContainer.evaluate(evaluation);
|
||||
boolean repeating = true;
|
||||
JRFillElement[] elements = (JRFillElement[])getElements();
|
||||
for (int i = 0; repeating && i < elements.length; i++)
|
||||
repeating &= elements[i].isValueRepeating();
|
||||
setValueRepeating(repeating);
|
||||
}
|
||||
this.filling = false;
|
||||
}
|
||||
|
||||
protected void rewind() throws JRException {
|
||||
this.frameContainer.rewind();
|
||||
this.filling = false;
|
||||
}
|
||||
|
||||
protected boolean prepare(int availableStretchHeight, boolean isOverflow) throws JRException {
|
||||
super.prepare(availableStretchHeight, isOverflow);
|
||||
if (!isToPrint())
|
||||
return false;
|
||||
this.first = (!isOverflow || !this.filling);
|
||||
int topPadding = this.first ? getLineBox().getTopPadding().intValue() : 0;
|
||||
int bottomPadding = getLineBox().getBottomPadding().intValue();
|
||||
if (availableStretchHeight < getRelativeY() - getY() - getBandBottomY() - topPadding) {
|
||||
setToPrint(false);
|
||||
return true;
|
||||
}
|
||||
if (!this.filling && !isPrintRepeatedValues() && isValueRepeating() && (!isPrintInFirstWholeBand() || !getBand().isFirstWholeOnPageColumn()) && (getPrintWhenGroupChanges() == null || !getBand().isNewGroup(getPrintWhenGroupChanges())) && (!isOverflow || !isPrintWhenDetailOverflows())) {
|
||||
setToPrint(false);
|
||||
return false;
|
||||
}
|
||||
if (!this.filling && isOverflow && isAlreadyPrinted())
|
||||
if (isPrintWhenDetailOverflows()) {
|
||||
rewind();
|
||||
setReprinted(true);
|
||||
} else {
|
||||
setToPrint(false);
|
||||
return false;
|
||||
}
|
||||
int stretchHeight = availableStretchHeight - getRelativeY() + getY() + getBandBottomY();
|
||||
this.frameContainer.initFill();
|
||||
this.frameContainer.resetElements();
|
||||
int frameElemsAvailableHeight = stretchHeight + bottomPadding + getLineBox().getTopPadding().intValue() - topPadding;
|
||||
this.frameContainer.prepareElements(frameElemsAvailableHeight, true);
|
||||
boolean willOverflow = this.frameContainer.willOverflow();
|
||||
if (willOverflow) {
|
||||
this.fillBottomBorder = false;
|
||||
setStretchHeight(getHeight() + stretchHeight);
|
||||
} else {
|
||||
int neededStretch = this.frameContainer.getStretchHeight() - this.frameContainer.getFirstY() + topPadding + bottomPadding;
|
||||
if (neededStretch <= getHeight() + stretchHeight) {
|
||||
this.fillBottomBorder = true;
|
||||
setStretchHeight(neededStretch);
|
||||
} else {
|
||||
this.fillBottomBorder = false;
|
||||
setStretchHeight(getHeight() + stretchHeight);
|
||||
}
|
||||
}
|
||||
this.filling = willOverflow;
|
||||
return willOverflow;
|
||||
}
|
||||
|
||||
protected void setStretchHeight(int stretchHeight) {
|
||||
super.setStretchHeight(stretchHeight);
|
||||
int topPadding = this.first ? getLineBox().getTopPadding().intValue() : 0;
|
||||
int bottomPadding = this.fillBottomBorder ? getLineBox().getBottomPadding().intValue() : 0;
|
||||
this.frameContainer.setStretchHeight(stretchHeight + this.frameContainer.getFirstY() - topPadding - bottomPadding);
|
||||
}
|
||||
|
||||
protected void stretchHeightFinal() {
|
||||
this.frameContainer.stretchElements();
|
||||
this.frameContainer.moveBandBottomElements();
|
||||
this.frameContainer.removeBlankElements();
|
||||
int topPadding = this.first ? getLineBox().getTopPadding().intValue() : 0;
|
||||
int bottomPadding = this.fillBottomBorder ? getLineBox().getBottomPadding().intValue() : 0;
|
||||
super.setStretchHeight(this.frameContainer.getStretchHeight() - this.frameContainer.getFirstY() + topPadding + bottomPadding);
|
||||
}
|
||||
|
||||
protected JRPrintElement fill() throws JRException {
|
||||
JRTemplatePrintFrame printFrame = new JRTemplatePrintFrame(getTemplate());
|
||||
printFrame.setX(getX());
|
||||
printFrame.setY(getRelativeY());
|
||||
printFrame.setWidth(getWidth());
|
||||
this.frameContainer.fillElements(printFrame);
|
||||
printFrame.setHeight(getStretchHeight());
|
||||
transferProperties(printFrame);
|
||||
return printFrame;
|
||||
}
|
||||
|
||||
protected JRTemplateFrame getTemplate() {
|
||||
Map templatesMap;
|
||||
JRStyle style = getStyle();
|
||||
if (this.first) {
|
||||
if (this.fillBottomBorder) {
|
||||
templatesMap = this.templates;
|
||||
} else {
|
||||
templatesMap = this.bottomTemplateFrames;
|
||||
}
|
||||
} else if (this.fillBottomBorder) {
|
||||
templatesMap = this.topTemplateFrames;
|
||||
} else {
|
||||
templatesMap = this.topBottomTemplateFrames;
|
||||
}
|
||||
JRTemplateFrame boxTemplate = (JRTemplateFrame)templatesMap.get(style);
|
||||
if (boxTemplate == null) {
|
||||
boxTemplate = new JRTemplateFrame((this.band == null) ? null : this.band.getOrigin(), this.filler.getJasperPrint().getDefaultStyleProvider(), this);
|
||||
transferProperties(boxTemplate);
|
||||
if (this.first) {
|
||||
if (!this.fillBottomBorder) {
|
||||
boxTemplate.copyBox(getLineBox());
|
||||
JRBoxUtil.reset(boxTemplate.getLineBox(), false, false, false, true);
|
||||
}
|
||||
} else if (this.fillBottomBorder) {
|
||||
boxTemplate.copyBox(getLineBox());
|
||||
JRBoxUtil.reset(boxTemplate.getLineBox(), false, false, true, false);
|
||||
} else {
|
||||
boxTemplate.copyBox(getLineBox());
|
||||
JRBoxUtil.reset(boxTemplate.getLineBox(), false, false, true, true);
|
||||
}
|
||||
templatesMap.put(style, boxTemplate);
|
||||
}
|
||||
return boxTemplate;
|
||||
}
|
||||
|
||||
protected void resolveElement(JRPrintElement element, byte evaluation) {}
|
||||
|
||||
public JRElement[] getElements() {
|
||||
return this.frameContainer.getElements();
|
||||
}
|
||||
|
||||
public List getChildren() {
|
||||
return this.frameContainer.getChildren();
|
||||
}
|
||||
|
||||
public void collectExpressions(JRExpressionCollector collector) {
|
||||
collector.collect(this);
|
||||
}
|
||||
|
||||
public JRLineBox getLineBox() {
|
||||
return ((JRBoxContainer)this.parent).getLineBox();
|
||||
}
|
||||
|
||||
public byte getBorder() {
|
||||
return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getPen());
|
||||
}
|
||||
|
||||
public Byte getOwnBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getPen());
|
||||
}
|
||||
|
||||
public void setBorder(byte border) {
|
||||
JRPenUtil.setLinePenFromPen(border, (JRPen)getLineBox().getPen());
|
||||
}
|
||||
|
||||
public void setBorder(Byte border) {
|
||||
JRPenUtil.setLinePenFromPen(border, (JRPen)getLineBox().getPen());
|
||||
}
|
||||
|
||||
public Color getBorderColor() {
|
||||
return getLineBox().getPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnBorderColor() {
|
||||
return getLineBox().getPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setBorderColor(Color borderColor) {
|
||||
getLineBox().getPen().setLineColor(borderColor);
|
||||
}
|
||||
|
||||
public int getPadding() {
|
||||
return getLineBox().getPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnPadding() {
|
||||
return getLineBox().getOwnPadding();
|
||||
}
|
||||
|
||||
public void setPadding(int padding) {
|
||||
getLineBox().setPadding(padding);
|
||||
}
|
||||
|
||||
public void setPadding(Integer padding) {
|
||||
getLineBox().setPadding(padding);
|
||||
}
|
||||
|
||||
public byte getTopBorder() {
|
||||
return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getTopPen());
|
||||
}
|
||||
|
||||
public Byte getOwnTopBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getTopPen());
|
||||
}
|
||||
|
||||
public void setTopBorder(byte topBorder) {
|
||||
JRPenUtil.setLinePenFromPen(topBorder, (JRPen)getLineBox().getTopPen());
|
||||
}
|
||||
|
||||
public void setTopBorder(Byte topBorder) {
|
||||
JRPenUtil.setLinePenFromPen(topBorder, (JRPen)getLineBox().getTopPen());
|
||||
}
|
||||
|
||||
public Color getTopBorderColor() {
|
||||
return getLineBox().getTopPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnTopBorderColor() {
|
||||
return getLineBox().getTopPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setTopBorderColor(Color topBorderColor) {
|
||||
getLineBox().getTopPen().setLineColor(topBorderColor);
|
||||
}
|
||||
|
||||
public int getTopPadding() {
|
||||
return getLineBox().getTopPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnTopPadding() {
|
||||
return getLineBox().getOwnTopPadding();
|
||||
}
|
||||
|
||||
public void setTopPadding(int topPadding) {
|
||||
getLineBox().setTopPadding(topPadding);
|
||||
}
|
||||
|
||||
public void setTopPadding(Integer topPadding) {
|
||||
getLineBox().setTopPadding(topPadding);
|
||||
}
|
||||
|
||||
public byte getLeftBorder() {
|
||||
return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getLeftPen());
|
||||
}
|
||||
|
||||
public Byte getOwnLeftBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getLeftPen());
|
||||
}
|
||||
|
||||
public void setLeftBorder(byte leftBorder) {
|
||||
JRPenUtil.setLinePenFromPen(leftBorder, (JRPen)getLineBox().getLeftPen());
|
||||
}
|
||||
|
||||
public void setLeftBorder(Byte leftBorder) {
|
||||
JRPenUtil.setLinePenFromPen(leftBorder, (JRPen)getLineBox().getLeftPen());
|
||||
}
|
||||
|
||||
public Color getLeftBorderColor() {
|
||||
return getLineBox().getLeftPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnLeftBorderColor() {
|
||||
return getLineBox().getLeftPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setLeftBorderColor(Color leftBorderColor) {
|
||||
getLineBox().getLeftPen().setLineColor(leftBorderColor);
|
||||
}
|
||||
|
||||
public int getLeftPadding() {
|
||||
return getLineBox().getLeftPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnLeftPadding() {
|
||||
return getLineBox().getOwnLeftPadding();
|
||||
}
|
||||
|
||||
public void setLeftPadding(int leftPadding) {
|
||||
getLineBox().setLeftPadding(leftPadding);
|
||||
}
|
||||
|
||||
public void setLeftPadding(Integer leftPadding) {
|
||||
getLineBox().setLeftPadding(leftPadding);
|
||||
}
|
||||
|
||||
public byte getBottomBorder() {
|
||||
return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getBottomPen());
|
||||
}
|
||||
|
||||
public Byte getOwnBottomBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getBottomPen());
|
||||
}
|
||||
|
||||
public void setBottomBorder(byte bottomBorder) {
|
||||
JRPenUtil.setLinePenFromPen(bottomBorder, (JRPen)getLineBox().getBottomPen());
|
||||
}
|
||||
|
||||
public void setBottomBorder(Byte bottomBorder) {
|
||||
JRPenUtil.setLinePenFromPen(bottomBorder, (JRPen)getLineBox().getBottomPen());
|
||||
}
|
||||
|
||||
public Color getBottomBorderColor() {
|
||||
return getLineBox().getBottomPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnBottomBorderColor() {
|
||||
return getLineBox().getBottomPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setBottomBorderColor(Color bottomBorderColor) {
|
||||
getLineBox().getBottomPen().setLineColor(bottomBorderColor);
|
||||
}
|
||||
|
||||
public int getBottomPadding() {
|
||||
return getLineBox().getBottomPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnBottomPadding() {
|
||||
return getLineBox().getOwnBottomPadding();
|
||||
}
|
||||
|
||||
public void setBottomPadding(int bottomPadding) {
|
||||
getLineBox().setBottomPadding(bottomPadding);
|
||||
}
|
||||
|
||||
public void setBottomPadding(Integer bottomPadding) {
|
||||
getLineBox().setBottomPadding(bottomPadding);
|
||||
}
|
||||
|
||||
public byte getRightBorder() {
|
||||
return JRPenUtil.getPenFromLinePen((JRPen)getLineBox().getRightPen());
|
||||
}
|
||||
|
||||
public Byte getOwnRightBorder() {
|
||||
return JRPenUtil.getOwnPenFromLinePen((JRPen)getLineBox().getRightPen());
|
||||
}
|
||||
|
||||
public void setRightBorder(byte rightBorder) {
|
||||
JRPenUtil.setLinePenFromPen(rightBorder, (JRPen)getLineBox().getRightPen());
|
||||
}
|
||||
|
||||
public void setRightBorder(Byte rightBorder) {
|
||||
JRPenUtil.setLinePenFromPen(rightBorder, (JRPen)getLineBox().getRightPen());
|
||||
}
|
||||
|
||||
public Color getRightBorderColor() {
|
||||
return getLineBox().getRightPen().getLineColor();
|
||||
}
|
||||
|
||||
public Color getOwnRightBorderColor() {
|
||||
return getLineBox().getRightPen().getOwnLineColor();
|
||||
}
|
||||
|
||||
public void setRightBorderColor(Color rightBorderColor) {
|
||||
getLineBox().getRightPen().setLineColor(rightBorderColor);
|
||||
}
|
||||
|
||||
public int getRightPadding() {
|
||||
return getLineBox().getRightPadding().intValue();
|
||||
}
|
||||
|
||||
public Integer getOwnRightPadding() {
|
||||
return getLineBox().getOwnRightPadding();
|
||||
}
|
||||
|
||||
public void setRightPadding(int rightPadding) {
|
||||
getLineBox().setRightPadding(rightPadding);
|
||||
}
|
||||
|
||||
public void setRightPadding(Integer rightPadding) {
|
||||
getLineBox().setRightPadding(rightPadding);
|
||||
}
|
||||
|
||||
public void visit(JRVisitor visitor) {
|
||||
visitor.visitFrame(this);
|
||||
}
|
||||
|
||||
public JRElement getElementByKey(String key) {
|
||||
return JRBaseElementGroup.getElementByKey(getElements(), key);
|
||||
}
|
||||
|
||||
public JRFillCloneable createClone(JRFillCloneFactory factory) {
|
||||
return new JRFillFrame(this, factory);
|
||||
}
|
||||
|
||||
protected class JRFillFrameElements extends JRFillElementContainer {
|
||||
private final JRFillFrame this$0;
|
||||
|
||||
JRFillFrameElements(JRFillObjectFactory factory) {
|
||||
super(JRFillFrame.this.filler, (JRElementGroup)JRFillFrame.this.parentFrame, factory);
|
||||
initElements();
|
||||
}
|
||||
|
||||
JRFillFrameElements(JRFillFrameElements frameElements, JRFillCloneFactory factory) {
|
||||
super(frameElements, factory);
|
||||
initElements();
|
||||
}
|
||||
|
||||
protected int getContainerHeight() {
|
||||
return JRFillFrame.this.getHeight() - JRFillFrame.this.getLineBox().getTopPadding().intValue() - JRFillFrame.this.getLineBox().getBottomPadding().intValue();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user