height = getHeaderVariablesHeight(djGroup);
Iterator it = variables.iterator();
int yOffsetGlabel = 0;
while (it.hasNext()) {
DJGroupVariable var = (DJGroupVariable) it.next();
AbstractColumn col = var.getColumnToApplyOperation();
//Build the expression for the variable
String variableName = col.getGroupVariableName(type, djGroup.getColumnToGroupBy().getColumnProperty().getProperty());
//Add the group label
DJGroupLabel label = var.getLabel();
JRDesignTextField labelTf = null;
if (label != null){
JRDesignExpression labelExp;
if (label.isJasperExpression()) //a text with things like "$F{myField}"
labelExp = ExpressionUtils.createStringExpression(label.getText());
else if (label.getLabelExpression() != null){
labelExp = ExpressionUtils.createExpression(variableName + "_labelExpression", label.getLabelExpression());
} else //a simple text
//labelExp = ExpressionUtils.createStringExpression("\""+ Utils.escapeTextForExpression(label.getText())+ "\"");
labelExp = ExpressionUtils.createStringExpression("\""+ label.getText() + "\"");
labelTf = new JRDesignTextField();
labelTf.setExpression(labelExp);
labelTf.setWidth(col.getWidth().intValue());
labelTf.setHeight(label.getHeight());
labelTf.setX(col.getPosX().intValue());
labelTf.setY(yOffset);
yOffsetGlabel = labelTf.getHeight();
if (inFooter){
labelTf.setPositionType(JRDesignElement.POSITION_TYPE_FIX_RELATIVE_TO_TOP);
}
applyStyleToElement(label.getStyle(), labelTf);
band.addElement(labelTf);
}
JRDesignExpression expression = new JRDesignExpression();
JRDesignTextField textField = new JRDesignTextField();
textField.setEvaluationTime(JRExpression.EVALUATION_TIME_GROUP);
if (var.getValueExpression() != null) {
expression = ExpressionUtils.createExpression(variableName + "_valueExpression", var.getValueExpression());
}
else
setTextAndClassToExpression(expression,var,col,variableName);
if (var.getOperation() != DJCalculation.COUNT && var.getOperation() != DJCalculation.DISTINCT_COUNT )
textField.setPattern(col.getPattern());
if (col instanceof PercentageColumn) {
PercentageColumn pcol = (PercentageColumn) col;
expression.setText(pcol.getTextForExpression(djGroup, djGroup ,type));
expression.setValueClassName(pcol.getValueClassNameForExpression());
textField.setEvaluationTime(JRExpression.EVALUATION_TIME_AUTO);
} else {
textField.setEvaluationGroup(jgroup);
}
textField.setKey(variableName);
textField.setExpression(expression);
if (inFooter){
textField.setPositionType(JRDesignElement.POSITION_TYPE_FIX_RELATIVE_TO_TOP);
}
textField.setX(col.getPosX().intValue());
//if (yOffset!=0)
textField.setY(yOffset + yOffsetGlabel);
textField.setHeight(0 + height ); //XXX be carefull with the "2+ ..."
textField.setWidth(col.getWidth().intValue());
textField.setKey("variable_for_column_"+ getVisibleColumns().indexOf(col) + "_in_group_" + getDesign().getGroupsList().indexOf(jgroup));
//Assign the style to the element.
//First we look for the specific element style, then the default style for the group variables
//and finally the column style.
Style defStyle = DJConstants.HEADER.equals(type)
? djGroup.getDefaulHeaderVariableStyle()
: djGroup.getDefaulFooterVariableStyle();
if (var.getStyle() != null)
applyStyleToElement(var.getStyle(), textField);
else if (col.getStyle() != null) {
//Last resource is to use the column style, but a copy of it because
//the one in the internal cache can get modified by the layout manager (like in the odd row case)
Style style = col.getStyle();
try {
style = (Style) style.clone();
style.setName(null); //set to null to make applyStyleToElement(...) assign a name
} catch (Exception e) { }
applyStyleToElement(style, textField);
}
else if (defStyle != null)
applyStyleToElement(defStyle, textField);
if (var.getPrintWhenExpression() != null) {
JRDesignExpression exp = ExpressionUtils.createExpression(variableName + "_printWhenExpression", var.getPrintWhenExpression());
textField.setPrintWhenExpression(exp);
if (labelTf != null)
labelTf.setPrintWhenExpression(exp);
}
band.addElement(textField);
}
if (djGroup.getColumnToGroupBy() instanceof GlobalGroupColumn) {
int totalWidth = 0;
DJGroupVariable leftmostColumn = findLeftMostColumn(variables);
totalWidth = leftmostColumn.getColumnToApplyOperation().getPosX().intValue();
GlobalGroupColumn globalCol = (GlobalGroupColumn) djGroup.getColumnToGroupBy();
JRDesignTextField globalTextField = new JRDesignTextField();
JRDesignExpression globalExp = new JRDesignExpression();