package org.saiku.adhoc.service.report.tasks;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.reporting.engine.classic.core.AttributeNames;
import org.pentaho.reporting.engine.classic.core.Element;
import org.pentaho.reporting.engine.classic.core.ReportElement;
import org.saiku.adhoc.model.master.SaikuElementFormat;
import org.saiku.adhoc.model.master.SaikuLabel;
import org.saiku.adhoc.model.master.SaikuMasterModel;
import org.saiku.adhoc.utils.TemplateUtils;
public class SaikuUpdateReportFooterTask implements UpdateTask {
private Log log = LogFactory.getLog(SaikuUpdateReportFooterTask.class);
private List<SaikuLabel> messages;
private String prefix;
private SaikuMasterModel model;
public SaikuUpdateReportFooterTask(List<SaikuLabel> messages,
String prefix, SaikuMasterModel model) {
this.messages = messages;
this.prefix = "rpt-rft-0-";
this.model = model;
}
@Override
public void processElement(ReportElement e, int index) {
Element el = (Element) e;
final String uid = prefix + index;
if(Boolean.TRUE.equals(el.getParent().
getAttribute("http://reporting.pentaho.org/namespaces/engine/attributes/wizard", "generated-content-marker"))){
return;
}
//markup the element
if(el.getElementTypeName().equals("message") ||
el.getElementTypeName().equals("label")||
e.getAttribute("http://reporting.pentaho.org/namespaces/engine/attributes/wizard", "aggregation-type")!=null){
final String htmlClass = "saiku " + uid;
e.setAttribute(AttributeNames.Html.NAMESPACE, AttributeNames.Html.STYLE_CLASS, htmlClass);
SaikuLabel m = null;
for (SaikuLabel msg : this.messages) {
if(uid.equals(msg.getUid())){
m = msg;
break;
}
}
if(m==null){
m = new SaikuLabel();
m.setElementFormat(new SaikuElementFormat());
m.setUid(uid);
String val =(String) e.getAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.VALUE);
m.setValue(val);
this.messages.add(m);
m.setLayoutId(uid);
}
e.setAttribute("http://reporting.pentaho.org/namespaces/engine/attributes/wizard", "allow-metadata-styling", Boolean.FALSE);
if(e.getAttribute("http://reporting.pentaho.org/namespaces/engine/attributes/wizard", "aggregation-type")==null){
e.setAttribute(AttributeNames.Core.NAMESPACE, AttributeNames.Core.VALUE, m.getValue());
}
SaikuElementFormat tempFormat = (SaikuElementFormat) m.getElementFormat().clone();
TemplateUtils.mergeElementFormats(e.getStyle(), tempFormat);
//set a transient format
m.getElementFormat().setTempFormat(tempFormat);
}
}
}