first commit
This commit is contained in:
383
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillTextField.java
Normal file
383
hrmsEjb/net/sf/jasperreports/engine/fill/JRFillTextField.java
Normal file
@@ -0,0 +1,383 @@
|
||||
package net.sf.jasperreports.engine.fill;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.Format;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.JRExpression;
|
||||
import net.sf.jasperreports.engine.JRExpressionCollector;
|
||||
import net.sf.jasperreports.engine.JRGroup;
|
||||
import net.sf.jasperreports.engine.JRHyperlink;
|
||||
import net.sf.jasperreports.engine.JRHyperlinkParameter;
|
||||
import net.sf.jasperreports.engine.JRPrintElement;
|
||||
import net.sf.jasperreports.engine.JRPrintHyperlinkParameters;
|
||||
import net.sf.jasperreports.engine.JRPrintText;
|
||||
import net.sf.jasperreports.engine.JRStyle;
|
||||
import net.sf.jasperreports.engine.JRTextElement;
|
||||
import net.sf.jasperreports.engine.JRTextField;
|
||||
import net.sf.jasperreports.engine.JRVisitor;
|
||||
import net.sf.jasperreports.engine.util.JRDataUtils;
|
||||
import net.sf.jasperreports.engine.util.JRStyleResolver;
|
||||
|
||||
public class JRFillTextField extends JRFillTextElement implements JRTextField {
|
||||
private JRGroup evaluationGroup = null;
|
||||
|
||||
private String anchorName = null;
|
||||
|
||||
private String hyperlinkReference = null;
|
||||
|
||||
private String hyperlinkAnchor = null;
|
||||
|
||||
private Integer hyperlinkPage = null;
|
||||
|
||||
private String hyperlinkTooltip;
|
||||
|
||||
private JRPrintHyperlinkParameters hyperlinkParameters;
|
||||
|
||||
protected JRFillTextField(JRBaseFiller filler, JRTextField textField, JRFillObjectFactory factory) {
|
||||
super(filler, (JRTextElement)textField, factory);
|
||||
this.evaluationGroup = factory.getGroup(textField.getEvaluationGroup());
|
||||
}
|
||||
|
||||
protected JRFillTextField(JRFillTextField textField, JRFillCloneFactory factory) {
|
||||
super(textField, factory);
|
||||
this.evaluationGroup = textField.evaluationGroup;
|
||||
}
|
||||
|
||||
public boolean isStretchWithOverflow() {
|
||||
return ((JRTextField)this.parent).isStretchWithOverflow();
|
||||
}
|
||||
|
||||
public void setStretchWithOverflow(boolean isStretchWithOverflow) {}
|
||||
|
||||
public byte getEvaluationTime() {
|
||||
return ((JRTextField)this.parent).getEvaluationTime();
|
||||
}
|
||||
|
||||
public String getPattern() {
|
||||
return JRStyleResolver.getPattern(this);
|
||||
}
|
||||
|
||||
public String getOwnPattern() {
|
||||
return ((JRTextField)this.parent).getOwnPattern();
|
||||
}
|
||||
|
||||
public void setPattern(String pattern) {}
|
||||
|
||||
public boolean isBlankWhenNull() {
|
||||
return JRStyleResolver.isBlankWhenNull(this);
|
||||
}
|
||||
|
||||
public Boolean isOwnBlankWhenNull() {
|
||||
return ((JRTextField)this.parent).isOwnBlankWhenNull();
|
||||
}
|
||||
|
||||
public void setBlankWhenNull(boolean isBlank) {}
|
||||
|
||||
public void setBlankWhenNull(Boolean isBlank) {}
|
||||
|
||||
public byte getHyperlinkType() {
|
||||
return ((JRTextField)this.parent).getHyperlinkType();
|
||||
}
|
||||
|
||||
public byte getHyperlinkTarget() {
|
||||
return ((JRTextField)this.parent).getHyperlinkTarget();
|
||||
}
|
||||
|
||||
public JRGroup getEvaluationGroup() {
|
||||
return this.evaluationGroup;
|
||||
}
|
||||
|
||||
public JRExpression getExpression() {
|
||||
return ((JRTextField)this.parent).getExpression();
|
||||
}
|
||||
|
||||
public JRExpression getAnchorNameExpression() {
|
||||
return ((JRTextField)this.parent).getAnchorNameExpression();
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkReferenceExpression() {
|
||||
return ((JRTextField)this.parent).getHyperlinkReferenceExpression();
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkAnchorExpression() {
|
||||
return ((JRTextField)this.parent).getHyperlinkAnchorExpression();
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkPageExpression() {
|
||||
return ((JRTextField)this.parent).getHyperlinkPageExpression();
|
||||
}
|
||||
|
||||
protected String getAnchorName() {
|
||||
return this.anchorName;
|
||||
}
|
||||
|
||||
protected String getHyperlinkReference() {
|
||||
return this.hyperlinkReference;
|
||||
}
|
||||
|
||||
protected String getHyperlinkAnchor() {
|
||||
return this.hyperlinkAnchor;
|
||||
}
|
||||
|
||||
protected Integer getHyperlinkPage() {
|
||||
return this.hyperlinkPage;
|
||||
}
|
||||
|
||||
protected String getHyperlinkTooltip() {
|
||||
return this.hyperlinkTooltip;
|
||||
}
|
||||
|
||||
protected JRTemplateText getJRTemplateText() {
|
||||
JRStyle style = getStyle();
|
||||
JRTemplateText template = (JRTemplateText)getTemplate(style);
|
||||
if (template == null) {
|
||||
template = new JRTemplateText((this.band == null) ? null : this.band.getOrigin(), this.filler.getJasperPrint().getDefaultStyleProvider(), this);
|
||||
transferProperties(template);
|
||||
setTemplatePattern(template);
|
||||
registerTemplate(style, template);
|
||||
}
|
||||
return template;
|
||||
}
|
||||
|
||||
protected void setTemplatePattern(JRTemplateText template) {
|
||||
if (getExpression() != null) {
|
||||
Class valueClass = getExpression().getValueClass();
|
||||
if (!String.class.equals(valueClass)) {
|
||||
template.setValueClassName(valueClass.getName());
|
||||
String pattern = getTemplatePattern();
|
||||
if (pattern != null)
|
||||
template.setPattern(pattern);
|
||||
if (!this.filler.hasMasterFormatFactory())
|
||||
template.setFormatFactoryClass(this.filler.getFormatFactory().getClass().getName());
|
||||
if (!this.filler.hasMasterLocale())
|
||||
template.setLocaleCode(JRDataUtils.getLocaleCode(this.filler.getLocale()));
|
||||
if (!this.filler.hasMasterTimeZone() && Date.class.isAssignableFrom(valueClass))
|
||||
template.setTimeZoneId(JRDataUtils.getTimeZoneId(this.filler.getTimeZone()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void evaluate(byte evaluation) throws JRException {
|
||||
initDelayedEvaluations();
|
||||
reset();
|
||||
evaluatePrintWhenExpression(evaluation);
|
||||
if (isPrintWhenExpressionNull() || (!isPrintWhenExpressionNull() && isPrintWhenTrue()))
|
||||
if (isEvaluateNow())
|
||||
evaluateText(evaluation);
|
||||
}
|
||||
|
||||
protected void evaluateText(byte evaluation) throws JRException {
|
||||
evaluateProperties(evaluation);
|
||||
Object textFieldValue = evaluateExpression(getExpression(), evaluation);
|
||||
if (textFieldValue == null) {
|
||||
if (isBlankWhenNull())
|
||||
textFieldValue = "";
|
||||
} else {
|
||||
Format format = getFormat();
|
||||
if (format != null)
|
||||
textFieldValue = format.format(textFieldValue);
|
||||
}
|
||||
String oldRawText = getRawText();
|
||||
String newRawText = processMarkupText(String.valueOf(textFieldValue));
|
||||
setRawText(newRawText);
|
||||
setTextStart(0);
|
||||
setTextEnd(0);
|
||||
setValueRepeating(((oldRawText == null && newRawText == null) || (oldRawText != null && oldRawText.equals(newRawText))));
|
||||
this.anchorName = (String)evaluateExpression(getAnchorNameExpression(), evaluation);
|
||||
this.hyperlinkReference = (String)evaluateExpression(getHyperlinkReferenceExpression(), evaluation);
|
||||
this.hyperlinkAnchor = (String)evaluateExpression(getHyperlinkAnchorExpression(), evaluation);
|
||||
this.hyperlinkPage = (Integer)evaluateExpression(getHyperlinkPageExpression(), evaluation);
|
||||
this.hyperlinkTooltip = (String)evaluateExpression(getHyperlinkTooltipExpression(), evaluation);
|
||||
this.hyperlinkParameters = JRFillHyperlinkHelper.evaluateHyperlinkParameters((JRHyperlink)this, this.expressionEvaluator, evaluation);
|
||||
}
|
||||
|
||||
protected boolean prepare(int availableStretchHeight, boolean isOverflow) throws JRException {
|
||||
boolean willOverflow = false;
|
||||
super.prepare(availableStretchHeight, isOverflow);
|
||||
if (!isToPrint())
|
||||
return willOverflow;
|
||||
boolean isToPrint = true;
|
||||
boolean isReprinted = false;
|
||||
if (isEvaluateNow()) {
|
||||
if (isOverflow) {
|
||||
if (getPositionType() == 3) {
|
||||
setTextStart(0);
|
||||
setTextEnd(0);
|
||||
}
|
||||
if (getTextEnd() >= getText().length() || !isStretchWithOverflow() || getRotation() != 0)
|
||||
if (isAlreadyPrinted())
|
||||
if (isPrintWhenDetailOverflows()) {
|
||||
setTextStart(0);
|
||||
setTextEnd(0);
|
||||
isReprinted = true;
|
||||
} else {
|
||||
isToPrint = false;
|
||||
}
|
||||
if (isToPrint && isPrintWhenExpressionNull() && !isPrintRepeatedValues() && isValueRepeating())
|
||||
isToPrint = false;
|
||||
} else if (isPrintWhenExpressionNull() && !isPrintRepeatedValues() && isValueRepeating()) {
|
||||
if ((!isPrintInFirstWholeBand() || !getBand().isFirstWholeOnPageColumn()) && (getPrintWhenGroupChanges() == null || !getBand().isNewGroup(getPrintWhenGroupChanges())))
|
||||
isToPrint = false;
|
||||
}
|
||||
if (isToPrint)
|
||||
if (availableStretchHeight >= getRelativeY() - getY() - getBandBottomY()) {
|
||||
if (getTextEnd() < getText().length() || getTextEnd() == 0) {
|
||||
if (isStretchWithOverflow() && getRotation() == 0) {
|
||||
chopTextElement(availableStretchHeight - getRelativeY() + getY() + getBandBottomY());
|
||||
if (getTextEnd() < getText().length())
|
||||
willOverflow = true;
|
||||
} else {
|
||||
chopTextElement(0);
|
||||
}
|
||||
} else {
|
||||
isToPrint = false;
|
||||
}
|
||||
} else {
|
||||
isToPrint = false;
|
||||
willOverflow = true;
|
||||
}
|
||||
if (isToPrint && isRemoveLineWhenBlank() && getText().substring(getTextStart(), getTextEnd()).trim().length() == 0)
|
||||
isToPrint = false;
|
||||
} else {
|
||||
if (isOverflow && isAlreadyPrinted())
|
||||
if (isPrintWhenDetailOverflows()) {
|
||||
isReprinted = true;
|
||||
} else {
|
||||
isToPrint = false;
|
||||
}
|
||||
if (isToPrint && availableStretchHeight < getRelativeY() - getY() - getBandBottomY()) {
|
||||
isToPrint = false;
|
||||
willOverflow = true;
|
||||
}
|
||||
}
|
||||
setToPrint(isToPrint);
|
||||
setReprinted(isReprinted);
|
||||
return willOverflow;
|
||||
}
|
||||
|
||||
protected JRPrintElement fill() throws JRException {
|
||||
JRTemplatePrintText text;
|
||||
JRRecordedValuesPrintText recordedValuesText;
|
||||
byte evaluationType = getEvaluationTime();
|
||||
if (isEvaluateAuto()) {
|
||||
text = recordedValuesText = new JRRecordedValuesPrintText(getJRTemplateText());
|
||||
} else {
|
||||
text = new JRTemplatePrintText(getJRTemplateText());
|
||||
recordedValuesText = null;
|
||||
}
|
||||
text.setX(getX());
|
||||
text.setY(getRelativeY());
|
||||
text.setWidth(getWidth());
|
||||
if (getRotation() == 0) {
|
||||
text.setHeight(getStretchHeight());
|
||||
} else {
|
||||
text.setHeight(getHeight());
|
||||
}
|
||||
text.setRunDirection(getRunDirection());
|
||||
if (isEvaluateNow()) {
|
||||
copy(text);
|
||||
} else if (isEvaluateAuto()) {
|
||||
initDelayedEvaluationPrint(recordedValuesText);
|
||||
} else {
|
||||
this.filler.addBoundElement(this, text, evaluationType, getEvaluationGroup(), this.band);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
protected void copy(JRPrintText text) {
|
||||
text.setLineSpacingFactor(getLineSpacingFactor());
|
||||
text.setLeadingOffset(getLeadingOffset());
|
||||
text.setTextHeight(getTextHeight());
|
||||
setPrintText(text);
|
||||
text.setAnchorName(getAnchorName());
|
||||
text.setHyperlinkReference(getHyperlinkReference());
|
||||
text.setHyperlinkAnchor(getHyperlinkAnchor());
|
||||
text.setHyperlinkPage(getHyperlinkPage());
|
||||
text.setHyperlinkTooltip(getHyperlinkTooltip());
|
||||
text.setBookmarkLevel(getBookmarkLevel());
|
||||
text.setHyperlinkParameters(this.hyperlinkParameters);
|
||||
transferProperties((JRPrintElement)text);
|
||||
}
|
||||
|
||||
protected Format getFormat() {
|
||||
Format format = null;
|
||||
JRExpression valueExpression = getExpression();
|
||||
if (valueExpression != null) {
|
||||
Class valueClass = valueExpression.getValueClass();
|
||||
if (Date.class.isAssignableFrom(valueClass)) {
|
||||
format = this.filler.getDateFormat(getPattern());
|
||||
} else if (Number.class.isAssignableFrom(valueClass)) {
|
||||
format = this.filler.getNumberFormat(getPattern());
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
|
||||
protected String getTemplatePattern() {
|
||||
String pattern = null;
|
||||
String originalPattern = getPattern();
|
||||
Format format = getFormat();
|
||||
JRExpression valueExpression = getExpression();
|
||||
if (format != null && valueExpression != null) {
|
||||
Class valueClass = valueExpression.getValueClass();
|
||||
if (Date.class.isAssignableFrom(valueClass)) {
|
||||
if (format instanceof SimpleDateFormat)
|
||||
pattern = ((SimpleDateFormat)format).toPattern();
|
||||
} else if (Number.class.isAssignableFrom(valueClass)) {
|
||||
if (format instanceof DecimalFormat)
|
||||
pattern = ((DecimalFormat)format).toPattern();
|
||||
}
|
||||
}
|
||||
if (pattern == null)
|
||||
pattern = originalPattern;
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public void collectExpressions(JRExpressionCollector collector) {
|
||||
collector.collect(this);
|
||||
}
|
||||
|
||||
public void visit(JRVisitor visitor) {
|
||||
visitor.visitTextField(this);
|
||||
}
|
||||
|
||||
protected void resolveElement(JRPrintElement element, byte evaluation) throws JRException {
|
||||
evaluateText(evaluation);
|
||||
chopTextElement(0);
|
||||
copy((JRPrintText)element);
|
||||
}
|
||||
|
||||
public int getBookmarkLevel() {
|
||||
return ((JRTextField)this.parent).getBookmarkLevel();
|
||||
}
|
||||
|
||||
public JRFillCloneable createClone(JRFillCloneFactory factory) {
|
||||
return new JRFillTextField(this, factory);
|
||||
}
|
||||
|
||||
protected void collectDelayedEvaluations() {
|
||||
collectDelayedEvaluations(getExpression());
|
||||
collectDelayedEvaluations(getAnchorNameExpression());
|
||||
collectDelayedEvaluations(getHyperlinkReferenceExpression());
|
||||
collectDelayedEvaluations(getHyperlinkAnchorExpression());
|
||||
collectDelayedEvaluations(getHyperlinkPageExpression());
|
||||
}
|
||||
|
||||
public JRHyperlinkParameter[] getHyperlinkParameters() {
|
||||
return ((JRTextField)this.parent).getHyperlinkParameters();
|
||||
}
|
||||
|
||||
public String getLinkType() {
|
||||
return ((JRTextField)this.parent).getLinkType();
|
||||
}
|
||||
|
||||
public JRExpression getHyperlinkTooltipExpression() {
|
||||
return ((JRTextField)this.parent).getHyperlinkTooltipExpression();
|
||||
}
|
||||
|
||||
protected boolean canOverflow() {
|
||||
return (isStretchWithOverflow() && getRotation() == 0 && isEvaluateNow() && this.filler.isBandOverFlowAllowed());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user