Package it.eng.spagobi.kpi.utils

Source Code of it.eng.spagobi.kpi.utils.BasicTemplateBuilder$NameRes

package it.eng.spagobi.kpi.utils;




/**
* SpagoBI - The Business Intelligence Free Platform
*
* Copyright (C) 2004 - 2008 Engineering Ingegneria Informatica S.p.A.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.

* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*
**/

import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanException;
import it.eng.spago.error.EMFUserError;
import it.eng.spagobi.commons.dao.DAOFactory;
import it.eng.spagobi.commons.utilities.GeneralUtilities;
import it.eng.spagobi.engines.kpi.bo.ChartImpl;
import it.eng.spagobi.engines.kpi.bo.KpiLine;
import it.eng.spagobi.engines.kpi.bo.KpiLineVisibilityOptions;
import it.eng.spagobi.engines.kpi.bo.KpiResourceBlock;
import it.eng.spagobi.kpi.config.bo.KpiValue;
import it.eng.spagobi.kpi.model.bo.Resource;
import it.eng.spagobi.kpi.threshold.bo.Threshold;
import it.eng.spagobi.kpi.threshold.bo.ThresholdValue;

import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.safehaus.uuid.UUID;
import org.safehaus.uuid.UUIDGenerator;
import org.xml.sax.InputSource;



//TODO: Auto-generated Javadoc
/**
* The Class BasicTemplateBuilder.
*
* @author Giulio Gavardi
*/
public class BasicTemplateBuilder  {

  private static transient org.apache.log4j.Logger logger=Logger.getLogger(BasicTemplateBuilder.class);

  private KpiLineVisibilityOptions options = new KpiLineVisibilityOptions();

  static String staticTextNameS="<staticText>" +
  "  <reportElement x=\"0\"" +
  "  y=\"0\"" +
  "   width=\"210\"" +
  "   height=\"12\"" +
  "  key=\"staticText-1\" />" +
  "  <box></box>" +
  "  <textElement>  " +
  "  <font size=\"8\" />" +
  "  </textElement>" +
  "  <text><![CDATA[KPI1]]></text>" +
  "  </staticText>";


  static String staticTextNumberS="<staticText>" +
  "  <reportElement" +
  "  x=\"235\"" +
  "  y=\"0\"" +
  "  width=\"35\"" +
  "  height=\"12\"" +
  "  key=\"staticText-2\"/>" +
  "  <box></box>" +
  "  <textElement textAlignment=\"Right\" >" +
  "  <font size=\"8\" isBold=\"true\"/>" +
  "  </textElement>" +
  "  <text></text>" +
  "  </staticText>";
 
  static String staticTextWeightS="<staticText>" +
  "  <reportElement" +
  "  x=\"284\"" +
  "  y=\"0\"" +
  "  width=\"17\"" +
  "  height=\"12\"" +
  "  key=\"staticText-2\"/>" +
  "  <box></box>" +
  "  <textElement textAlignment=\"Right\">" +
  "  <font size=\"6\" isBold=\"false\"/>" +
  "  </textElement>" +
  "  <text></text>" +
  "  </staticText>";

  static String imageS="<image  evaluationTime=\"Now\" hyperlinkType=\"None\"  hyperlinkTarget=\"Self\" >" +
  "  <reportElement" +
  "  x=\"310\"" +
  "  y=\"35\"" +
  "  width=\"130\"" +
  "  height=\"11\"" +
  "  key=\"image-1\"/>" +
  "  <box></box>" +
  "  <graphicElement stretchType=\"NoStretch\"/>" +
  "  <imageExpression class=\"java.net.URL\"></imageExpression>" +
  "  </image>";
 

  static String resourceBandS="<rectangle>" +
  "  <reportElement" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"535\"" +
  "  height=\"14\"" +
  "  forecolor=\"#FFFFFF\""+
  "  backcolor=\"#5B6C7C\"" +
  "  key=\"rectangle-2\"/>" +
  "  <graphicElement stretchType=\"NoStretch\"/>" +
  "  </rectangle>";


  static String resourceNameS="<staticText>" +
  "  <reportElement" +
  "  x=\"6\"" +
  "  y=\"0\"" +
  "  width=\"120\"" +
  "  height=\"14\"" +
  "  forecolor=\"#FFFFFF\""+
  "  key=\"staticText-3\"/>" +
  "  <box></box>" +
  "  <textElement verticalAlignment=\"Middle\" >" +
  "  <font size=\"10\" isBold=\"true\"/>" +
  " </textElement>" +
  "  <text><![CDATA[risorsa]]></text>" +
  "  </staticText>";
 
  static String columnHeaderBandS="<rectangle>" +
  "  <reportElement" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"535\"" +
  "  height=\"12\"" +
  "  forecolor=\"#FFFFFF\""+
  "  backcolor=\"#DDDDDD\"" +
  "  key=\"rectangle-2\"/>" +
  "  <graphicElement stretchType=\"NoStretch\"/>" +
  "  </rectangle>";
 
  static String columnModelHeaderS="<staticText>"+
  "  <reportElement"+
  "  x=\"6\""+
  "  y=\"15\""+
  "  width=\"93\""+
  "  height=\"12\""+
  "  forecolor=\"#000000\""+
  "  key=\"staticText-4\"/>"+
  "  <box></box>"+
  "  <textElement verticalAlignment=\"Middle\">"+
  "  <font pdfFontName=\"Helvetica-Bold\" size=\"8\" isBold=\"true\"/>"+
  "  </textElement>"+
  "  <text><![CDATA[MODEL]]></text>"+
  "  </staticText>";
   
  static String columnKPIHeaderS="<staticText>"+
  "  <reportElement"+
  "  x=\"158\""+
  "  y=\"15\""+
  "  width=\"120\""+
  "  height=\"12\""+
  "  forecolor=\"#000000\""+
  "  isPrintWhenDetailOverflows=\"true\""+
  "  key=\"staticText-5\"/>"+
  "  <box></box>"+
  "  <textElement textAlignment=\"Right\" verticalAlignment=\"Middle\">"+
  "  <font pdfFontName=\"Helvetica-Bold\" size=\"8\" isBold=\"true\"/>"+
  "  </textElement>"+
  "  <text><![CDATA[KPI VALUE]]></text>"+
  "  </staticText>"
   
  static String columnWeightHeaderS="<staticText>"+
  "  <reportElement"+
  "  x=\"285\""+
  "  y=\"15\""+
  "  width=\"53\""+
  "  height=\"12\""+
  "  forecolor=\"#000000\""+
  "  isPrintWhenDetailOverflows=\"true\""+
  "  key=\"staticText-6\"/>"+
  "  <box></box>"+
  "  <textElement verticalAlignment=\"Middle\">"+
  "  <font pdfFontName=\"Helvetica-Bold\" size=\"8\" isBold=\"true\"/>"+
  "  </textElement>"+
  "  <text><![CDATA[WEIGHT]]></text>"+
  "  </staticText>"

  static String columnThresholdHeaderS="<staticText>"+
  "  <reportElement"+
  "  x=\"436\""+
  "  y=\"15\""+
  "  width=\"97\""+
  "  height=\"12\""+
  "  forecolor=\"#000000\""+
  "  key=\"staticText-7\"/>"+
  "  <box></box>"+
  "  <textElement textAlignment=\"Center\" verticalAlignment=\"Middle\">"+
  "  <font pdfFontName=\"Helvetica-Bold\" size=\"8\" isBold=\"true\"/>"+
  "  </textElement>"+
  "  <text><![CDATA[THRESHOLD RANGE]]></text>"+
  "  </staticText>"

  static String thresholdCodeS="<staticText>"+
  "  <reportElement"+
  "  x=\"446\""+
  "  y=\"15\""+
  "  width=\"72\""+
  "  height=\"8\""+
  "  key=\"staticText-8\"/>"+
  "  <box></box>"+
  "  <textElement textAlignment=\"Right\" verticalAlignment=\"Middle\">"+
  "  <font size=\"6\" />"+
  "  </textElement>"+
  "  <text></text>"+
  "  </staticText>"
 
  static String thresholdValueS="<staticText>"+
  "  <reportElement"+
  "  x=\"446\""+
  "  y=\"47\""+
  "  width=\"72\""+
  "  height=\"8\""+
  "  key=\"staticText-9\"/>"+
  "  <box></box>"+
  "  <textElement textAlignment=\"Right\" verticalAlignment=\"Middle\">"+
  "  <font size=\"6\" />"+
  "  </textElement>"+
  "  <text></text>"+
  "  </staticText>"

  static String semaphorS="<rectangle>" +
  "  <reportElement" +
  "  mode=\"Opaque\"" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"7\"" +
  "  height=\"7\"" +
  "  forecolor=\"#FFFFFF\"" +
  "  backcolor=\"#FFFFFF\"" +
  "  key=\"rectangle-1\"/>" +
  "  <graphicElement stretchType=\"NoStretch\"/>" +
  "  </rectangle>";
 
 
  static String oddLineSeparator="<line>"+
  "  <reportElement"+
  "  x=\"0\""+
  "  y=\"103\""+
  "  width=\"535\""+
  "  height=\"0\""+
  "  forecolor=\"#666666\""+
  "  key=\"line-1\"/>"+
  "  <graphicElement stretchType=\"NoStretch\"/>"+
  "  </line>";
 
  static String evenLineSeparator="<line>"+
  "  <reportElement"+
  "  x=\"0\""+
  "  y=\"103\""+
  "  width=\"535\""+
  "  height=\"0\""+
  "  forecolor=\"#990000\""+
  "  key=\"line-1\"/>"+
  "  <graphicElement stretchType=\"NoStretch\"/>"+
  "  </line>";
 
  static String thresholdBandS="<rectangle>" +
  "  <reportElement" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"535\"" +
  "  height=\"14\"" +
  "  forecolor=\"#FFFFFF\""+
  "  backcolor=\"#009999\"" +
  "  key=\"rectangle-2\"/>" +
  "  <graphicElement stretchType=\"NoStretch\"/>" +
  "  </rectangle>";
 
  static String thresholdTitleS="<staticText>" +
  "  <reportElement" +
  "  x=\"6\"" +
  "  y=\"0\"" +
  "  width=\"120\"" +
  "  height=\"14\"" +
  "  forecolor=\"#FFFFFF\""+
  "  key=\"staticText-3\"/>" +
  "  <box></box>" +
  "  <textElement verticalAlignment=\"Middle\" >" +
  "  <font size=\"10\" isBold=\"true\"/>" +
  " </textElement>" +
  "  <text><![CDATA[THRESHOLD DETAILS]]></text>" +
  "  </staticText>";


  static String thresholdTextCodeS="<staticText>" +
  "  <reportElement" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"95\"" +
  "  height=\"12\"" +
  "  forecolor=\"#000000\""+
  "  key=\"staticText-15\"/>" +
  "  <box></box>" +
  "  <textElement verticalAlignment=\"Middle\" textAlignment=\"Left\" >" +
  "  <font size=\"8\" />" +
  "   </textElement>" +
  "  <text></text>" +
  "  </staticText>";

  static String thresholdValuesCodeS="<staticText>" +
  "  <reportElement" +
  "  x=\"0\"" +
  "  y=\"0\"" +
  "  width=\"90\"" +
  "  height=\"12\"" +
  "  key=\"staticText-15\"/>" +
  "  <box></box>" +
  "  <textElement verticalAlignment=\"Middle\" textAlignment=\"Left\" >" +
  "  <font size=\"8\" />" +
  "   </textElement>" +
  "  <text></text>" +
  "  </staticText>";
 
  static String thresholdLineSeparatorS="<line>"+
  "  <reportElement"+
  "  x=\"0\""+
  "  y=\"103\""+
  "  width=\"535\""+
  "  height=\"0\""+
  "  forecolor=\"#000099\""+
  "  key=\"line-1\"/>"+
  "  <graphicElement stretchType=\"NoStretch\"/>"+
  "  </line>";
 
  static String subReportS ="<subreport  isUsingCache=\"true\">"+
  "  <reportElement"  +
  "  x=\"0\""+
  "  y=\"0\""+
  "  width=\"535\""+
  "  height=\"6\""+
    "  key=\"subreport-1\"/>"+
  "  <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>"  +
  "  <subreportExpression  class=\"java.lang.String\"></subreportExpression>"+
  "  </subreport>";
 


  SourceBean staticTextName=null;
  SourceBean staticTextNumber=null;
  SourceBean staticTextWeightNumber=null;
  SourceBean image=null;
  SourceBean resourceBand=null;
  SourceBean resourceName=null;
  SourceBean semaphor=null;
  SourceBean oddLineS=null;
  SourceBean evenLineS=null;
  SourceBean columnHeaderBand=null;
  SourceBean columnModelHeader=null;
  SourceBean columnKPIHeader=null;
  SourceBean columnWeightHeader=null;
  SourceBean columnThresholdHeader=null;
  SourceBean thresholdCode=null;
  SourceBean thresholdValue=null;
 
  SourceBean thresholdBand=null;
  SourceBean thresholdTitle=null;
  SourceBean thresholdLineSeparator=null;
  SourceBean thresholdTextCode=null;
  SourceBean thresholdTextValue=null;
 
  SourceBean subReport=null;

  String documentName=null;
 
  List thresholdsList=new ArrayList();

  // margin left of text in summary band
  final Integer xStarter=new Integer(0);
  // indentation value
  final Integer xIncrease=new Integer(5);
  // margin up of text in summary bend
  final Integer yStarter=new Integer(5);
  // Height of the gray band with the resource name
  final Integer resourceBandHeight=new Integer(14);
  // Height of a value row
  final Integer valueHeight=new Integer(20);
//  height between lines
  final Integer separatorHeight=new Integer(1);
//  height between lines
  final Integer separatorModelsHeight=new Integer(10);
//  width between elements
  final Integer separatorWidth = new Integer(5);
//  Width of text label with code - name
  final Integer textWidth=new Integer(280);
//  width of text label with numbers
  final Integer numbersWidth=new Integer(50)
//  width of the semaphor
  final Integer semaphorWidth=new Integer(10);
//  width of the title band
  final Integer titleHeight=new Integer(50);
//  height of the column header band
  final Integer columnHeaderHeight=new Integer(14);
//  height of the column header band
  final Integer thresholdFieldWidth=new Integer(92);
 
  final Integer thresholdSemaphoreWidth=new Integer(10);
//  height of the column header band
  final Integer thresholdFieldSeparatorWidth=new Integer(10);
//  height of the column header band
  Integer maxFirstSubTemplateHeight=new Integer(745);
  final Integer maxSubTemplateHeight=new Integer(760);
  final Integer subreportHeight = new Integer(8);
  final Integer maxSubTemplateWIdtht=new Integer(530);

  int countSubreports = 0;
 
  Integer masterHeight=new Integer(10)

  // counting the actual height of the report
  Integer actualHeight=new Integer(0);
  // counting the actual height of the detail band of master report
  Integer detailMasterHeight=new Integer(0);

  // Map for the name resolution of upper case tag names
  //Map nameResolution=new Map<String>();
  List nameResolution=new ArrayList();

  List resources;
  InputSource inputSource;

  //public SourceBean templateBaseContent=null;
  public SourceBean detailMaster=null;
  //public SourceBean bandDetailReport=null;
  public SourceBean detailBandMaster=null;
 
  public List subreports = new ArrayList();
  public SourceBean subTemplateBaseContent = null;
  SourceBean subtitleSB = null;
  SourceBean bandDetailReport = null;
  SourceBean subSummarySB = null;
  SourceBean bandSummaryReport = null;


  public BasicTemplateBuilder(String documentName) {
    super();
    this.documentName = documentName;
  }


  /* Build the template
   * @see it.eng.qbe.export.ITemplateBuilder#buildTemplate()
   */
  public List buildTemplate(List resources) {
    logger.debug("IN");
    // name resolution for upper cases tag
    nameResolution();

    // Create Source Bean of template of template
    String templateStr = getTemplateTemplate();

    SourceBean templateBaseContent =null;
    List toReturn = new ArrayList();
    String finalTemplate="";

    logger.debug("Recovered template START ");
    logger.debug(templateStr);
    logger.debug("Recovered template END ");
    if(templateStr!=null){
      try {
        templateBaseContent = SourceBean.fromXMLString(templateStr);
      } catch (Exception e) {
        logger.error("Error in converting template of template into a SOurce Bean, check the XML code");
      }

    try {
      staticTextName = SourceBean.fromXMLString(staticTextNameS); // this is for text
      staticTextNumber = SourceBean.fromXMLString(staticTextNumberS);
      staticTextWeightNumber = SourceBean.fromXMLString(staticTextWeightS);
      image = SourceBean.fromXMLString(imageS);
      resourceBand=SourceBean.fromXMLString(resourceBandS);
      resourceName=SourceBean.fromXMLString(resourceNameS);
      semaphor=SourceBean.fromXMLString(semaphorS);
      evenLineS=SourceBean.fromXMLString(evenLineSeparator);
      oddLineS=SourceBean.fromXMLString(oddLineSeparator);
      columnHeaderBand=SourceBean.fromXMLString(columnHeaderBandS);
      columnModelHeader=SourceBean.fromXMLString(columnModelHeaderS);
      columnKPIHeader=SourceBean.fromXMLString(columnKPIHeaderS);
      columnWeightHeader=SourceBean.fromXMLString(columnWeightHeaderS);
      columnThresholdHeader=SourceBean.fromXMLString(columnThresholdHeaderS);
      thresholdCode=SourceBean.fromXMLString(thresholdCodeS);
      thresholdValue=SourceBean.fromXMLString(thresholdValueS);
     
      thresholdBand=SourceBean.fromXMLString(thresholdBandS);
      thresholdTitle=SourceBean.fromXMLString(thresholdTitleS);
      thresholdTextValue=SourceBean.fromXMLString(thresholdValuesCodeS);
      thresholdTextCode=SourceBean.fromXMLString(thresholdTextCodeS);
      thresholdLineSeparator=SourceBean.fromXMLString(thresholdLineSeparatorS);
     
      subReport=SourceBean.fromXMLString(subReportS);
    } catch (Exception e) {
      logger.error("Error in converting static elemnts into Source Beans, check the XML code");
    }

    //change title
    SourceBean titleSB=(SourceBean)templateBaseContent.getAttribute("title");
    SourceBean titleText=(SourceBean)titleSB.getAttribute("band.staticText.text");
    titleText.setCharacters(documentName);
   
    // make DETAIL BAND of master with subreports
    detailMaster=(SourceBean)templateBaseContent.getAttribute("DETAIL");
    detailBandMaster=(SourceBean)detailMaster.getAttribute("BAND");
    masterHeight = new Integer(0);
   
    List subreports = createSubreports(resources);
   
    finalTemplate=templateBaseContent.toXML(false, false);
    for (Iterator iterator = nameResolution.iterator(); iterator.hasNext();) {
      NameRes nameR = (NameRes) iterator.next();
      String toReplace = nameR.getToSubstitute();
      String replaceWith=nameR.getCorrectString();
      finalTemplate=finalTemplate.replaceAll("<"+toReplace, "<"+replaceWith);
      finalTemplate=finalTemplate.replaceAll("</"+toReplace, "</"+replaceWith);   
    }
    toReturn.add(finalTemplate);
    logger.debug("Built template START");
    logger.debug(finalTemplate);
    logger.debug("Built template END");
   
   
    if(subreports!=null && !subreports.isEmpty()){
      logger.debug("There are subreports!");
      Iterator suit = subreports.iterator();
      while(suit.hasNext()){
        SourceBean subTemplateContent = (SourceBean)suit.next();
        String subTemplate = subTemplateContent.toXML(false);
        for (Iterator iterator = nameResolution.iterator(); iterator.hasNext();) {
          NameRes nameR = (NameRes) iterator.next();
          String toReplace = nameR.getToSubstitute();
          String replaceWith=nameR.getCorrectString();
          subTemplate=subTemplate.replaceAll("<"+toReplace, "<"+replaceWith);
          subTemplate=subTemplate.replaceAll("</"+toReplace, "</"+replaceWith);
        }
        toReturn.add(subTemplate);
        logger.debug("Built subtemplate: "+subTemplate);
        //System.out.println(subTemplate);
      }
    }
 
    }
    //System.out.println(finalTemplate);
    logger.debug("OUT");
    return toReturn;
  }

  public List createSubreports(List resources){
    logger.debug("IN");
    subreports = new ArrayList();
    subTemplateBaseContent = createNewSubReport(countSubreports);
    countSubreports ++;
   
    //change subtemplatetitle
    subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
    bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND")
   
    //change subtemplatesummary
    subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
    bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
   
    try {
    // cycle on resources
    for (Iterator iterator = resources.iterator(); iterator.hasNext();) {
      KpiResourceBlock thisBlock = (KpiResourceBlock) iterator.next();
      options = thisBlock.getOptions()
       
        if(actualHeight+separatorModelsHeight+resourceBandHeight+10<maxFirstSubTemplateHeight){
          List sourceBeansToAdd = newResource(thisBlock,bandDetailReport)
          if (sourceBeansToAdd!=null && !sourceBeansToAdd.isEmpty()){
          Iterator it = sourceBeansToAdd.iterator();
            while(it.hasNext()){
              SourceBean toAdd = (SourceBean)it.next();
              bandDetailReport.setAttribute(toAdd);
            }
          }
        }else{
         
          //Add last subreport to the List
          increaseHeight(subTemplateBaseContent);
          subreports.add(subTemplateBaseContent);
          actualHeight = new Integer(0);
          subTemplateBaseContent = createNewSubReport(countSubreports);
          countSubreports ++;
          //Get my bandDetailReport from new subreport
          subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
          bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND");
          //change subtemplatesummary
          subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
          bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
          //NEW SUBREPORT
          List sourceBeansToAdd = newResource(thisBlock,bandDetailReport)
          if (sourceBeansToAdd!=null && !sourceBeansToAdd.isEmpty()){
          Iterator it = sourceBeansToAdd.iterator();
            while(it.hasNext()){
              SourceBean toAdd = (SourceBean)it.next();
              bandDetailReport.setAttribute(toAdd);
           
          }
        }
     
     
     
         
          if (actualHeight+separatorHeight+valueHeight+10<maxFirstSubTemplateHeight){
            KpiLine lineRoot=thisBlock.getRoot();
            List sourceBeansToAdd2 = newLine(lineRoot, 0,true);
            if (sourceBeansToAdd2!=null && !sourceBeansToAdd2.isEmpty()){
            Iterator it = sourceBeansToAdd2.iterator();
              while(it.hasNext()){
                SourceBean toAdd = (SourceBean)it.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }else{
            //Add last subreport to the List
            increaseHeight(subTemplateBaseContent);
            subreports.add(subTemplateBaseContent);
            actualHeight = new Integer(0);
            subTemplateBaseContent = createNewSubReport(countSubreports);
            countSubreports ++;
            //Get my bandDetailReport from new subreport
            subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
            bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND");
            //change subtemplatesummary
            subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
            bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
            //NEW SUBREPORT
            KpiLine lineRoot=thisBlock.getRoot();
            List sourceBeansToAdd2 = newLine(lineRoot, 0,true);
            if (sourceBeansToAdd2!=null && !sourceBeansToAdd2.isEmpty()){
            Iterator it = sourceBeansToAdd2.iterator();
              while(it.hasNext()){
                SourceBean toAdd = (SourceBean)it.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }
        }
   
      if (actualHeight+separatorModelsHeight+columnHeaderHeight+10<maxFirstSubTemplateHeight){
        List sourceBeansToAdd3 = newThresholdBlock(bandDetailReport);
        if (sourceBeansToAdd3!=null && !sourceBeansToAdd3.isEmpty()){
        Iterator it = sourceBeansToAdd3.iterator();
          while(it.hasNext()){
            SourceBean toAdd = (SourceBean)it.next();
            bandDetailReport.setAttribute(toAdd);
         
        }
      }else{
        //Add last subreport to the List
        increaseHeight(subTemplateBaseContent);
        subreports.add(subTemplateBaseContent);
        actualHeight = new Integer(0);
        subTemplateBaseContent = createNewSubReport(countSubreports);
        countSubreports ++;
        //Get my bandDetailReport from new subreport
        subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
        bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND");
        //change subtemplatesummary
        subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
        bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
        //NEW SUBREPORT
        List sourceBeansToAdd3 = newThresholdBlock(bandDetailReport);
        if (sourceBeansToAdd3!=null && !sourceBeansToAdd3.isEmpty()){
        Iterator it = sourceBeansToAdd3.iterator();
          while(it.hasNext()){
            SourceBean toAdd = (SourceBean)it.next();
            bandDetailReport.setAttribute(toAdd);
         
        }
      }
   

    if(thresholdsList!=null && !thresholdsList.isEmpty()){
      Iterator th = thresholdsList.iterator();
      while(th.hasNext()){
        Threshold t =(Threshold)th.next();

          if (actualHeight+separatorHeight+10<maxFirstSubTemplateHeight){
            List sourceBeansToAdd4 = newThresholdLine(t);
            if (sourceBeansToAdd4!=null && !sourceBeansToAdd4.isEmpty()){
            Iterator it = sourceBeansToAdd4.iterator();
              while(it.hasNext()){
                SourceBean toAdd = (SourceBean)it.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }else{
           
            //Add last subreport to the List
            increaseHeight(subTemplateBaseContent);
            subreports.add(subTemplateBaseContent);
            actualHeight = new Integer(0);
            subTemplateBaseContent = createNewSubReport(countSubreports);
            countSubreports ++;
            //Get my bandDetailReport from new subreport
            subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
            bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND");
            //change subtemplatesummary
            subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
            bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
            //NEW SUBREPORT
            List sourceBeansToAdd4 = newThresholdLine(t);
            if (sourceBeansToAdd4!=null && !sourceBeansToAdd4.isEmpty()){
            Iterator it = sourceBeansToAdd4.iterator();
              while(it.hasNext()){
                SourceBean toAdd = (SourceBean)it.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }
        }
      }
    } catch (SourceBeanException e) {
      logger.error("SourceBeanException",e);
      e.printStackTrace();
    }
    bandDetailReport = increaseHeight(subTemplateBaseContent);
    subreports.add(subTemplateBaseContent);
    logger.debug("OUT");
    return subreports;
  }
 
  public SourceBean createNewSubReport(int numOfSubreport){
    logger.debug("IN");

    SourceBean subTemplateBaseContent =null;
    // Create Source Bean of template of subtemplate
    String subTemplateStr = getTemplateSubTemplate();
    try {
      subTemplateBaseContent = SourceBean.fromXMLString(subTemplateStr);
    } catch (Exception e) {
      logger.error("Error in converting template of template into a SOurce Bean, check the XML code");
    }
   
    SourceBean subreport1;
    try {
      subreport1 = new SourceBean(subReport);
      subreport1.setAttribute("reportElement.y", new Integer(0));
      SourceBean subreport2=(SourceBean)subreport1.getAttribute("subreportExpression");
      String dirS=System.getProperty("java.io.tmpdir");
      String subr = dirS+ File.separatorChar + "Detail"+numOfSubreport+".jasper";
      subr = subr.replaceAll("\\\\", "/");
      subreport2.setCharacters("\""+subr+"\"");
      if(numOfSubreport==0){
        detailBandMaster.setAttribute(subreport1);
      }else{
        bandSummaryReport.setAttribute(subreport1);
      }
      detailMasterHeight += subreportHeight;
     
    } catch (SourceBeanException e) {
      e.printStackTrace();
      logger.error(e);
   
    logger.debug("OUT");
    return subTemplateBaseContent;
  }

  // set the total height
  public SourceBean increaseHeight(SourceBean tCont){
    logger.debug("IN");

    try {
      tCont.setAttribute("pageHeight",maxSubTemplateHeight);
      bandDetailReport.setAttribute("height", (actualHeight));
      bandSummaryReport.setAttribute("height", new Integer(7));
    } catch (SourceBeanException e) {
      logger.error("error in setting the height");
      return null;
    }
    logger.debug("OUT");
    return bandDetailReport;

  }


//  Add a resource band
  public List newResource(KpiResourceBlock block, SourceBean bandDetailReport){
    logger.debug("IN");
    List sourceBeansToAdd = new ArrayList();
    Resource res=block.getR();
     
      try{
        actualHeight+=separatorModelsHeight;

        SourceBean bandRes=new SourceBean(resourceBand);
        SourceBean bandName=new SourceBean(resourceName);
        SourceBean columnHeadBand=new SourceBean(columnHeaderBand);
        SourceBean modelColHeader=new SourceBean(columnModelHeader);
        SourceBean weightColHeader=new SourceBean(columnWeightHeader);
        SourceBean kpiColHeader=new SourceBean(columnKPIHeader);
        SourceBean kthreshColHeader=new SourceBean(columnThresholdHeader);
       
        if(res!=null){
          bandRes.setAttribute("reportElement.y", actualHeight.toString());
          bandName.setAttribute("reportElement.y", actualHeight.toString());
          logger.debug("add resource band for resource "+res.getName());
          SourceBean textValue1=(SourceBean)bandName.getAttribute("text");
          textValue1.setCharacters("RESOURCE: "+res.getName());

          sourceBeansToAdd.add(bandRes);
          sourceBeansToAdd.add(bandName);
          actualHeight+=resourceBandHeight;
        }
       
        columnHeadBand.setAttribute("reportElement.y",actualHeight.toString());
        modelColHeader.setAttribute("reportElement.y",actualHeight.toString());
        kpiColHeader.setAttribute("reportElement.y",actualHeight.toString());
        weightColHeader.setAttribute("reportElement.y",actualHeight.toString());
        kthreshColHeader.setAttribute("reportElement.y",actualHeight.toString());
       
        if(options.getModel_title()!=null ){
          SourceBean textValue=(SourceBean)modelColHeader.getAttribute("text");
          textValue.setCharacters(options.getModel_title());
        }
        if(options.getKpi_title()!=null ){
        SourceBean textValue1=(SourceBean)kpiColHeader.getAttribute("text");
        textValue1.setCharacters(options.getKpi_title());
        }
        if(options.getWeight_title()!=null ){
        SourceBean textValue2=(SourceBean)weightColHeader.getAttribute("text");
        textValue2.setCharacters(options.getWeight_title());
        }
        /*SourceBean textValue3=(SourceBean)kthreshColHeader.getAttribute("text");
        textValue3.setCharacters(options.getBullet_chart_title());*/
       
        sourceBeansToAdd.add(columnHeadBand);
        sourceBeansToAdd.add(modelColHeader);
        sourceBeansToAdd.add(kpiColHeader);
        sourceBeansToAdd.add(weightColHeader);
        sourceBeansToAdd.add(kthreshColHeader);     
       
        actualHeight+=columnHeaderHeight;

      }
      catch (Exception e) {
        logger.error("Error in setting the resource band",e);
        return null;
      }
   
    logger.debug("OUT");
    return sourceBeansToAdd;
  }


  public List newLine(KpiLine kpiLine, int level,Boolean evenLevel){
    logger.debug("IN");
    List sourceBeansToAdd = new ArrayList();
    try {
      actualHeight+=separatorHeight;
      SourceBean textCodeName=new SourceBean(staticTextName);   // code - name
      SourceBean textValue=new SourceBean(staticTextNumber)//value number
      SourceBean textWeight=new SourceBean(staticTextWeightNumber)// weight number
      SourceBean image1=new SourceBean(image);// Bullet Chart
      SourceBean semaphor1=new SourceBean(semaphor);// Semaphore
      SourceBean threshCode=new SourceBean(thresholdCode);// Threshold Code
      SourceBean threshValue=new SourceBean(thresholdValue);// Threshold Value
      SourceBean evenLine=new SourceBean(evenLineS);// Separator for even lines
      SourceBean oddLine=new SourceBean(oddLineS);// Separator for odd lines
      SourceBean extraimageToAdd = null;//in case 2 images are required
      if(evenLevel){
        extraimageToAdd =setLineAttributes(kpiLine,semaphor1,textCodeName,textValue,textWeight,image1,level,evenLine,threshCode,threshValue,extraimageToAdd);
      }else{
        extraimageToAdd = setLineAttributes(kpiLine,semaphor1,textCodeName,textValue,textWeight,image1,level,oddLine,threshCode,threshValue,extraimageToAdd);
      }
      actualHeight+=valueHeight;

      sourceBeansToAdd.add(semaphor1);
      sourceBeansToAdd.add(textCodeName);
      sourceBeansToAdd.add(textValue);
      sourceBeansToAdd.add(textWeight);
      sourceBeansToAdd.add(image1);
      if(extraimageToAdd!=null){
        sourceBeansToAdd.add(extraimageToAdd);
      }
      sourceBeansToAdd.add(threshCode);
      sourceBeansToAdd.add(threshValue);
      if(evenLevel){
        sourceBeansToAdd.add(evenLine);
      }else{
        sourceBeansToAdd.add(oddLine);
     
     
    } catch (SourceBeanException e) {
      logger.error("error while adding a line");
      return null;
    }

    List<KpiLine> children=kpiLine.getChildren();
    children = orderChildren(new ArrayList(),children);
    try {
     
    if(children!=null){
      for (Iterator iterator = children.iterator(); iterator.hasNext();) {
        KpiLine kpiLineChild = (KpiLine) iterator.next()
       
        Iterator it3 = sourceBeansToAdd.iterator();
        while(it3.hasNext()){
          SourceBean toAdd = (SourceBean)it3.next();
          bandDetailReport.setAttribute(toAdd);
       
        sourceBeansToAdd = new ArrayList()
       
          if (actualHeight+10<maxFirstSubTemplateHeight){
            List sourceBeansToAdd2 = newLine(kpiLineChild, level+1,!evenLevel);
            if (sourceBeansToAdd2!=null && !sourceBeansToAdd2.isEmpty()){
            Iterator it = sourceBeansToAdd2.iterator();
              while(it.hasNext()){
                SourceBean toAdd = (SourceBean)it.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }else{
               
            //Add last subreport to the List
            increaseHeight(subTemplateBaseContent);
            subreports.add(subTemplateBaseContent);
            actualHeight = new Integer(0);
            subTemplateBaseContent = createNewSubReport(countSubreports);
            countSubreports ++;
            //Get my bandDetailReport from new subreport
            subtitleSB=(SourceBean)subTemplateBaseContent.getAttribute("title");
            bandDetailReport=(SourceBean)subtitleSB.getAttribute("BAND");
            //change subtemplatesummary
            subSummarySB=(SourceBean)subTemplateBaseContent.getAttribute("summary");
            bandSummaryReport=(SourceBean)subSummarySB.getAttribute("BAND")
            //NEW SUBREPORT
            List sourceBeansToAdd2 = newLine(kpiLineChild, level+1,!evenLevel);
            if (sourceBeansToAdd2!=null && !sourceBeansToAdd2.isEmpty()){
            Iterator it2 = sourceBeansToAdd2.iterator();
              while(it2.hasNext()){
                SourceBean toAdd = (SourceBean)it2.next();
                bandDetailReport.setAttribute(toAdd);
             
            }
          }
        }
      }
    } catch (SourceBeanException e) {
      logger.error("SourceBeanException",e);
      e.printStackTrace();
    }
   
    logger.debug("OUT");
    return sourceBeansToAdd;
  }


  protected List orderChildren(List ordered, List notordered) {

    List toReturn = ordered;
    List temp = new ArrayList();
    KpiLine l = null;
    if(notordered!=null && !notordered.isEmpty()){
      Iterator it = notordered.iterator();
      while(it.hasNext()){
        KpiLine k = (KpiLine)it.next();
        if(l==null){
          l = k ;
        }else{
          if (k!=null && k.compareTo(l)<=0){
            temp.add(l);
            l = k;
          }else{
            temp.add(k);
          }
        }
      }
      toReturn.add(l);
      toReturn = orderChildren(toReturn,temp);
    }
    return toReturn;
  }

  private SourceBean setLineAttributes(KpiLine line,SourceBean semaphor, SourceBean textCodeName, SourceBean textValue,
      SourceBean textWeight, SourceBean image1, int level, SourceBean separatorline,SourceBean threshCode,SourceBean threshValue, SourceBean extraimageToAdd){
    logger.debug("IN");
   
    KpiValue kpiValue=line.getValue();
   
    ThresholdValue t = null;
    Color colorSemaphor = null;
    if ( kpiValue!=null && kpiValue.getValue() != null) {
      t = kpiValue.getThresholdOfValue();
      if(t!=null){
        colorSemaphor = t.getColor()
      }
    } 

    Integer xValue=xStarter+(xIncrease*Integer.valueOf(level));
    Integer yValue=actualHeight;

    try {
      //set Semaphor
      semaphor.setAttribute("reportElement.x", xValue.toString());
      semaphor.setAttribute("reportElement.y", new Integer(yValue.intValue()+2).toString());
      if(colorSemaphor!=null){

        String color=Integer.toHexString(colorSemaphor.getRGB());
        color="#"+color.substring(2);

        semaphor.setAttribute("reportElement.forecolor""#000000");
        semaphor.setAttribute("reportElement.backcolor", color);
      }else{
        semaphor.setAttribute("reportElement.forecolor", "#FFFFFF");
        semaphor.setAttribute("reportElement.backcolor", "#FFFFFF");
      }
      xValue=xValue+semaphorWidth+separatorWidth;

      // set text 1: Model CODE - Model NAME
      textCodeName.setAttribute("reportElement.x", (xValue));
      textCodeName.setAttribute("reportElement.y", yValue.toString());
      SourceBean textValue1=(SourceBean)textCodeName.getAttribute("text");
      textValue1.setCharacters(line.getModelInstanceCode()+"-"+line.getModelNodeName());

      xValue=xValue+textWidth+separatorWidth;

      //Set Value, weight and threshold code and value
      if(kpiValue!=null){
        String value1=kpiValue.getValue() != null ? kpiValue.getValue() : "";
        //set text2
        textValue.setAttribute("reportElement.y", yValue.toString());
        SourceBean textValue2=(SourceBean)textValue.getAttribute("text");
        textValue2.setCharacters(value1);

        String weight=(kpiValue.getWeight()!=null) ? kpiValue.getWeight().toString() : "";
        //set text2
        xValue=xValue+numbersWidth+separatorWidth;
        textWeight.setAttribute("reportElement.y", new Integer(yValue.intValue()+2).toString());
        SourceBean textValue3=(SourceBean)textWeight.getAttribute("text");
        textValue3.setCharacters(weight);
       
       
        if(t!=null){
          try {
            Threshold tr = DAOFactory.getThresholdDAO().loadThresholdById(t.getThresholdId());
            if (!thresholdsList.contains(tr)){
              thresholdsList.add(tr);
            }
           
          } catch (EMFUserError e) {
            logger.error("error in loading the Threshold by Id",e);
            e.printStackTrace();
          }
          String code=t.getThresholdCode() != null ? t.getThresholdCode() : "";
          String codeTh = "Code: "+code;
          if(codeTh.length()>20)codeTh = codeTh.substring(0, 19);
         
          threshCode.setAttribute("reportElement.y"new Integer(yValue.intValue()-2).toString());
          SourceBean threshCode2=(SourceBean)threshCode.getAttribute("text");
          threshCode2.setCharacters(codeTh);
       
       
          String labelTh=t.getLabel() != null ? t.getLabel() : "";
          String min = t.getMinValue()!= null ? t.getMinValue().toString() : null;
          String max = t.getMaxValue()!= null ?  t.getMaxValue().toString() : null;
          String valueTh = "Value: ";
          if(t.getThresholdType().equalsIgnoreCase("RANGE")){
            if (min!=null && max !=null){
                valueTh = valueTh + min+"-"+max+" "+labelTh;
            }else if (min!=null && max==null){
              valueTh = valueTh + "> "+min+" "+labelTh;
            }else if (min==null && max!=null){
               valueTh = valueTh + "< "+max+" "+labelTh;
            }
          }else if(t.getThresholdType().equalsIgnoreCase("MINIMUM")){
            valueTh = valueTh + "< "+min+" "+labelTh;
          }else if(t.getThresholdType().equalsIgnoreCase("MAXIMUM")){
            valueTh = valueTh + "> "+max+" "+labelTh;
          }
          if(valueTh.length()>25)valueTh = valueTh.substring(0, 24);
         
          threshValue.setAttribute("reportElement.y", new Integer(yValue.intValue()+7).toString());
          SourceBean threshValue2=(SourceBean)threshValue.getAttribute("text");
          threshValue2.setCharacters(valueTh);
        }

      }
      //Sets the bullet chart and or the threshold image
      if(options.getDisplay_bullet_chart() && options.getDisplay_threshold_image()){
        //both threshold image and bullet chart have to be seen
        if ( kpiValue!=null &&  kpiValue.getValue()!= null && kpiValue.getThresholdValues()!=null && !kpiValue.getThresholdValues().isEmpty()) {

          List thresholdValues = kpiValue.getThresholdValues();     
          // String chartType = value.getChartType();
          String chartType = "BulletGraph";
          Double val = new Double(kpiValue.getValue());
          Double target = kpiValue.getTarget();
          ChartImpl sbi = ChartImpl.createChart(chartType);
          sbi.setValueDataSet(val);
          if (target != null) {
            sbi.setTarget(target);
          }
          sbi.setShowAxis(options.getShow_axis())
          sbi.setThresholdValues(thresholdValues);
       
          JFreeChart chart = sbi.createChart();
          ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
          String requestIdentity = null;
          UUIDGenerator uuidGen  = UUIDGenerator.getInstance();
          UUID uuid = uuidGen.generateTimeBasedUUID();
          requestIdentity = uuid.toString();
          requestIdentity = requestIdentity.replaceAll("-", "");
          String path_param = requestIdentity;
          String dir=System.getProperty("java.io.tmpdir");
          String path=dir+"/"+requestIdentity+".png";
          java.io.File file1 = new java.io.File(path);
          logger.debug("Where is the image: "+path);
          try {
            ChartUtilities.saveChartAsPNG(file1, chart, 89, 11, info);
          } catch (IOException e) {
            e.printStackTrace();
            logger.error("Error in saving chart",e);
          }
          String urlPng=GeneralUtilities.getSpagoBiHost()+GeneralUtilities.getSpagoBiContext() + GeneralUtilities.getSpagoAdapterHttpUrl() +
          "?ACTION_NAME=GET_PNG2&NEW_SESSION=TRUE&path="+path_param+"&LIGHT_NAVIGATOR_DISABLED=TRUE";
          urlPng = "new java.net.URL(\""+urlPng+"\")";
          logger.debug("Image url: "+urlPng);
         
          image1.setAttribute("reportElement.y", yValue.toString());
          image1.setAttribute("reportElement.x", new Integer(310).toString());
          image1.setAttribute("reportElement.width", 90);
          SourceBean imageValue=(SourceBean)image1.getAttribute("imageExpression");
          imageValue.setCharacters(urlPng);
        }
        ThresholdValue tOfVal = line.getThresholdOfValue();
        if (tOfVal!=null && tOfVal.getPosition()!=null && tOfVal.getThresholdCode()!=null){
          String fileName ="position_"+tOfVal.getPosition().intValue();
          String dirName = tOfVal.getThresholdCode();
          String urlPng=GeneralUtilities.getSpagoBiHost()+GeneralUtilities.getSpagoBiContext() + GeneralUtilities.getSpagoAdapterHttpUrl() +
          "?ACTION_NAME=GET_THR_IMAGE&NEW_SESSION=TRUE&fileName="+fileName+"&dirName="+dirName+"&LIGHT_NAVIGATOR_DISABLED=TRUE"
         
          urlPng = "new java.net.URL(\""+urlPng+"\")";
          logger.debug("url: "+urlPng);
         
          extraimageToAdd=new SourceBean(image);
          extraimageToAdd.setAttribute("reportElement.y", yValue.toString());
          extraimageToAdd.setAttribute("reportElement.width",35);
          extraimageToAdd.setAttribute("reportElement.x", new Integer(408).toString());
          SourceBean imageValue=(SourceBean)extraimageToAdd.getAttribute("imageExpression");
          imageValue.setCharacters(urlPng);     
        }
      }else if(options.getDisplay_bullet_chart() && !options.getDisplay_threshold_image()){
        //only bullet chart has to be seen
        if ( kpiValue!=null &&  kpiValue.getValue()!= null && kpiValue.getThresholdValues()!=null && !kpiValue.getThresholdValues().isEmpty()) {

          List thresholdValues = kpiValue.getThresholdValues();     
          // String chartType = value.getChartType();
          String chartType = "BulletGraph";
          Double val = new Double(kpiValue.getValue());
          Double target = kpiValue.getTarget();
          ChartImpl sbi = ChartImpl.createChart(chartType);
          sbi.setValueDataSet(val);
          if (target != null) {
            sbi.setTarget(target);
          }
          sbi.setShowAxis(options.getShow_axis())
          sbi.setThresholdValues(thresholdValues);
         
          JFreeChart chart = sbi.createChart();
          ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
          String requestIdentity = null;
          UUIDGenerator uuidGen  = UUIDGenerator.getInstance();
          UUID uuid = uuidGen.generateTimeBasedUUID();
          requestIdentity = uuid.toString();
          requestIdentity = requestIdentity.replaceAll("-", "");
          String path_param = requestIdentity;
          String dir=System.getProperty("java.io.tmpdir");
          String path=dir+"/"+requestIdentity+".png";
          java.io.File file1 = new java.io.File(path);
          logger.debug("Where is the image: "+path);
          try {
            ChartUtilities.saveChartAsPNG(file1, chart, 130, 11, info);
          } catch (IOException e) {
            e.printStackTrace();
            logger.error("Error in saving chart",e);
          }
          String urlPng=GeneralUtilities.getSpagoBiHost()+GeneralUtilities.getSpagoBiContext() + GeneralUtilities.getSpagoAdapterHttpUrl() +
          "?ACTION_NAME=GET_PNG2&NEW_SESSION=TRUE&path="+path_param+"&LIGHT_NAVIGATOR_DISABLED=TRUE";
          urlPng = "new java.net.URL(\""+urlPng+"\")";
          logger.debug("Image url: "+urlPng);
         
          image1.setAttribute("reportElement.y", yValue.toString());
          SourceBean imageValue=(SourceBean)image1.getAttribute("imageExpression");
          imageValue.setCharacters(urlPng);
        }
      }else if(!options.getDisplay_bullet_chart() && options.getDisplay_threshold_image()){
        //only threshold image has to be seen
        ThresholdValue tOfVal = line.getThresholdOfValue();
        if (tOfVal!=null && tOfVal.getPosition()!=null && tOfVal.getThresholdCode()!=null){
          String fileName ="position_"+tOfVal.getPosition().intValue();
          String dirName = tOfVal.getThresholdCode();
          String urlPng=GeneralUtilities.getSpagoBiHost()+GeneralUtilities.getSpagoBiContext() + GeneralUtilities.getSpagoAdapterHttpUrl() +
          "?ACTION_NAME=GET_THR_IMAGE&NEW_SESSION=TRUE&fileName="+fileName+"&dirName="+dirName+"&LIGHT_NAVIGATOR_DISABLED=TRUE"
         
          urlPng = "new java.net.URL(\""+urlPng+"\")";
          logger.debug("url: "+urlPng);
          image1.setAttribute("reportElement.y", yValue.toString());
          SourceBean imageValue=(SourceBean)image1.getAttribute("imageExpression");
          imageValue.setCharacters(urlPng);
         
        }
      }

      separatorline.setAttribute("reportElement.y", new Integer(yValue.intValue()+16).toString());

    } catch (SourceBeanException e) {
      logger.error("error in drawing the line",e);
      e.printStackTrace();
    }
    logger.debug("OUT");
    return extraimageToAdd;
  }

  public List newThresholdBlock( SourceBean bandDetailReport){
    logger.debug("IN");
    List sourceBeansToAdd = new ArrayList();
      try{//Draws the Threshold Band and Title
        actualHeight+=separatorModelsHeight;
        SourceBean thresholdBand1=new SourceBean(thresholdBand)
        SourceBean thresholdTitle1=new SourceBean(thresholdTitle);
       
        thresholdBand1.setAttribute("reportElement.y",actualHeight.toString());
        thresholdTitle1.setAttribute("reportElement.y",actualHeight.toString())
       
        sourceBeansToAdd.add(thresholdBand1);
        sourceBeansToAdd.add(thresholdTitle1);
       
        actualHeight+=columnHeaderHeight;
     
      catch (Exception e) {
        logger.error("Error in setting the resource band");
        return null;
      }
   
    logger.debug("OUT");
    return sourceBeansToAdd;
  }
 
  public List newThresholdLine(Threshold t){
    List sourceBeansToAdd = new ArrayList();
    if (t!=null){
      try {
      actualHeight+=separatorHeight; 
      Integer yValue=actualHeight;
      //Draws the Threshold Code
      SourceBean thresholdTextCode1 = new SourceBean(thresholdTextCode);
     
      String code=t.getCode() != null ? t.getCode() : "";
      String codeTh = "Code: "+code;
      if(codeTh.length()>20)codeTh = codeTh.substring(0, 19);

      thresholdTextCode1.setAttribute("reportElement.y", yValue.toString());
      SourceBean threshCode2=(SourceBean)thresholdTextCode1.getAttribute("text");
      threshCode2.setCharacters(codeTh);
     
      sourceBeansToAdd.add(thresholdTextCode1);
      List semaphoreValue = newThresholdLine(t, bandDetailReport);
      sourceBeansToAdd.addAll(semaphoreValue);   
     
      //Adds a separator line
      SourceBean thresholdLineSeparator1=new SourceBean(thresholdLineSeparator);
      thresholdLineSeparator1.setAttribute("reportElement.y",new Integer(yValue.intValue()+16).toString());
      sourceBeansToAdd.add(thresholdLineSeparator1);
     
      } catch (SourceBeanException e) {
        logger.error("SourceBeanException", e);
        e.printStackTrace();
     
    }
    return sourceBeansToAdd;
  }
 
  public List newThresholdLine(Threshold t, SourceBean bandDetailReport){
    logger.debug("IN");
    List sourceBeansToAdd = new ArrayList();
    try {
      actualHeight+=separatorHeight; 
      Integer yValue=actualHeight;
      Integer xValue = new Integer(5);
      List thValues = t.getThresholdValues();
      if(thValues!=null && !thValues.isEmpty()){
        Iterator thIt = thValues.iterator();
        while(thIt.hasNext()){
          ThresholdValue val = (ThresholdValue)thIt.next();
          if (val!=null){
            SourceBean semaphor1=new SourceBean(semaphor);
            SourceBean thresholdTextValue1=new SourceBean(thresholdTextValue);
           
            //Semaphore Threshold creation
           
            xValue = xValue + thresholdFieldWidth;
           
            if(xValue +thresholdSemaphoreWidth + thresholdFieldWidth>=maxSubTemplateWIdtht){ 
              xValue = new Integer(5) + thresholdFieldWidth;
              actualHeight+=valueHeight;
              yValue = actualHeight;
            }
              String colorSemaphor = val.getColourString();
              semaphor1.setAttribute("reportElement.x", xValue.toString());
              semaphor1.setAttribute("reportElement.y", new Integer(yValue.intValue()+2).toString());
              if(colorSemaphor!=null){
                semaphor1.setAttribute("reportElement.forecolor""#000000");
                semaphor1.setAttribute("reportElement.backcolor", colorSemaphor);
              }else{
                semaphor1.setAttribute("reportElement.forecolor", "#FFFFFF");
                semaphor1.setAttribute("reportElement.backcolor", "#FFFFFF");
              }
              sourceBeansToAdd.add(semaphor1);
           
              xValue = xValue + thresholdFieldSeparatorWidth; 
                       
              //Threshold Value Creation 
              String labelTh=val.getLabel() != null ? val.getLabel() : "";
              String min = val.getMinValue()!= null ? val.getMinValue().toString() : null;
              String max = val.getMaxValue()!= null ?  val.getMaxValue().toString() : null;
              String valueTh = "Value: ";
              if(val.getThresholdType().equalsIgnoreCase("RANGE")){
                if (min!=null && max !=null){
                    valueTh = valueTh + min+"-"+max+" "+labelTh;
                }else if (min!=null && max==null){
                  valueTh = valueTh + "> "+min+" "+labelTh;
                }else if (min==null && max!=null){
                   valueTh = valueTh + "< "+max+" "+labelTh;
                }
              }else if(val.getThresholdType().equalsIgnoreCase("MINIMUM")){
                valueTh = valueTh + "< "+min+" "+labelTh;
              }else if(val.getThresholdType().equalsIgnoreCase("MAXIMUM")){
                valueTh = valueTh + "> "+max+" "+labelTh;
              }
              if(valueTh.length()>25)valueTh = valueTh.substring(0, 24);
 
              thresholdTextValue1.setAttribute("reportElement.x", xValue.toString());
              thresholdTextValue1.setAttribute("reportElement.y", yValue.toString());
              SourceBean threshValue2=(SourceBean)thresholdTextValue1.getAttribute("text");
              threshValue2.setCharacters(valueTh);
             
              sourceBeansToAdd.add(thresholdTextValue1);
          }
        }
      }

      actualHeight+=valueHeight;
     
    } catch (SourceBeanException e) {
      logger.error("error while adding a threshold line");
      return null;
    }

    logger.debug("OUT");
    return sourceBeansToAdd;
  }


  private void nameResolution(){

//    property
//    import
//    queryString
//    field
//    variable
//    background
//    band
//    title
//    line
//    reportElement
//    graphicElement
//    textField
//    box
//    textElement
//    font
//    textFieldExpression
//    pageHeader
//    columnHeader
//    detail
//    columnFooter
//    pageFooter
//    summary
//    staticText
//    text
//    image
//    imageExpression
   
    nameResolution.add(new NameRes("QUERYSTRING", "queryString"));
    nameResolution.add(new NameRes("TOPPEN", "topPen"));
    nameResolution.add(new NameRes("BOTTOMPEN", "bottomPen"));
    nameResolution.add(new NameRes("LEFTPEN", "leftPen"));
    nameResolution.add(new NameRes("RIGHTPEN", "rightPen"));
    nameResolution.add(new NameRes("GROUPEXPRESSION", "groupExpression"));
    nameResolution.add(new NameRes("groupEXPRESSION", "groupExpression"));
    nameResolution.add(new NameRes("GROUPHEADER", "groupHeader"));
    nameResolution.add(new NameRes("GROUPFOOTER", "groupFooter"));
    nameResolution.add(new NameRes("groupHEADER", "groupHeader"));
    nameResolution.add(new NameRes("groupFOOTER", "groupFooter"));
    nameResolution.add(new NameRes("GROUP", "group"));
    nameResolution.add(new NameRes("IMAGEEXPRESSION", "imageExpression"));
    nameResolution.add(new NameRes("imageEXPRESSION", "imageExpression"));
    nameResolution.add(new NameRes("SUBREPORT", "subreport"));
    nameResolution.add(new NameRes("SUBREPORTEXPRESSION", "subreportExpression"));
    nameResolution.add(new NameRes("subreportEXPRESSION", "subreportExpression"));
    nameResolution.add(new NameRes("CONNECTIONEXPRESSION", "connectionExpression"));
    nameResolution.add(new NameRes("connectionEXPRESSION", "connectionExpression"));
    nameResolution.add(new NameRes("JASPERREPORT", "jasperReport"));
    nameResolution.add(new NameRes("IMPORT", "import"));
    nameResolution.add(new NameRes("PROPERTY", "property"));
    nameResolution.add(new NameRes("QUERYSTRING", "queryString"));
    nameResolution.add(new NameRes("FIELD", "field"));
    nameResolution.add(new NameRes("VARIABLE", "variable"));
    nameResolution.add(new NameRes("BACKGROUND", "background"));
    nameResolution.add(new NameRes("BAND", "band"));
    nameResolution.add(new NameRes("TITLE", "title"));
    nameResolution.add(new NameRes("LINE", "line"));
    nameResolution.add(new NameRes("REPORTELEMENT", "reportElement"));
    nameResolution.add(new NameRes("GRAPHICELEMENT", "graphicElement"));
    nameResolution.add(new NameRes("reportELEMENT", "reportElement"));
    nameResolution.add(new NameRes("graphicELEMENT", "graphicElement"));
    nameResolution.add(new NameRes("TEXTFIELD", "textField"));
    nameResolution.add(new NameRes("textFIELD", "textField"));
    nameResolution.add(new NameRes("BOX", "box"));
    nameResolution.add(new NameRes("TEXTELEMENT", "textElement"));
    nameResolution.add(new NameRes("textELEMENT", "textElement"));
    nameResolution.add(new NameRes("FONT", "font"));
    nameResolution.add(new NameRes("TEXTFIELDEXPRESSION", "textFieldExpression"));
    nameResolution.add(new NameRes("textFIELDEXPRESSION", "textFieldExpression"));
    nameResolution.add(new NameRes("textFieldEXPRESSION", "textFieldExpression"));
    nameResolution.add(new NameRes("PAGEHEADER", "pageHeader"));
    nameResolution.add(new NameRes("COULMNHEADER", "columnHeader"));
    nameResolution.add(new NameRes("DETAIL", "detail"));
    nameResolution.add(new NameRes("COLUMNFOOTER", "columnFooter"));
    nameResolution.add(new NameRes("PAGEFOOTER", "pageFooter"));
    nameResolution.add(new NameRes("SUMMARY", "summary"));
    nameResolution.add(new NameRes("STATICTEXT", "staticText"));
    nameResolution.add(new NameRes("STATICText", "staticText"));
    nameResolution.add(new NameRes("TEXT", "text"));
    nameResolution.add(new NameRes("IMAGE", "image"))
    nameResolution.add(new NameRes("RECTANGLE", "rectangle"));
    nameResolution.add(new NameRes("INITIALVALUEEXPRESSION", "initialValueExpression"));
    nameResolution.add(new NameRes("COLUMNHEADER", "columnHeader"));
  }

 

  private class NameRes
  {
    private String toSubstitute ;
    private String correctString;
   
    private NameRes(String a, String b){
      toSubstitute=a;
      correctString=b;
    }
   
    private String getToSubstitute(){
      return toSubstitute;
    }
   
    private String getCorrectString(){
      return correctString;
    }
  }

  /**
   * Gets the template template.
   *
   * @return the template template
   */
  public String getTemplateTemplate() {
    StringBuffer buffer = new StringBuffer();
    logger.debug("IN");
    try{

      String templateDirPath = "it/eng/spagobi/kpi/utils/";
      logger.debug("templateDirPath: "+templateDirPath!=null ? templateDirPath : "");
      templateDirPath+="templateKpi.jrxml";
      logger.debug("templatePath: "+templateDirPath!=null ? templateDirPath : "");
     
      if (templateDirPath!=null){
               
          InputStream fis= Thread.currentThread().getContextClassLoader().getResourceAsStream(templateDirPath);
 
        if(fis!=null){
          logger.debug("File Input Stream created");
        }
        inputSource=new InputSource(fis);
        if(inputSource!=null){
          logger.debug("Input Source created");
        }
        BufferedReader reader = new BufferedReader( new InputStreamReader(fis) );
        if(reader!=null){
          logger.debug("Buffer Reader created");
        }
        String line = null;
        try {
          while( (line = reader.readLine()) != null) {
            buffer.append(line + "\n");
          }
        } catch (IOException e) {
          logger.error("error in appending lines to the buffer",e);
          e.printStackTrace();
        }
      }
    }
    catch (Exception e) {
      logger.error("error in retrieving the template",e);
      e.printStackTrace();
      return null;
    }
    logger.debug("OUT");
    return buffer.toString();
  }
 
  /**
   * Gets the template template.
   *
   * @return the template template
   */
  public String getTemplateSubTemplate() {
    StringBuffer buffer = new StringBuffer();
    logger.debug("IN");
    try{

      String templateDirPath = "it/eng/spagobi/kpi/utils/";
      logger.debug("templateDirPath: "+templateDirPath!=null ? templateDirPath : "");
      templateDirPath+="subTemplateKpi.jrxml";
      logger.debug("templatePath: "+templateDirPath!=null ? templateDirPath : "");
     
      if (templateDirPath!=null){
        InputStream fis= Thread.currentThread().getContextClassLoader().getResourceAsStream(templateDirPath);
       
        if(fis!=null){
          logger.debug("File Input Stream created");
        }
        inputSource=new InputSource(fis);
        if(inputSource!=null){
          logger.debug("Input Source created");
        }
        BufferedReader reader = new BufferedReader( new InputStreamReader(fis) );
        if(reader!=null){
          logger.debug("Buffer Reader created");
        }
        String line = null;
        try {
          while( (line = reader.readLine()) != null) {
            buffer.append(line + "\n");
          }
        } catch (IOException e) {
          logger.error("error in appending lines to the buffer",e);
          e.printStackTrace();
        }
      }
    }
    catch (Exception e) {
      logger.error("error in retrieving the template",e);
      e.printStackTrace();
      return null;
    }
    logger.debug("OUT");
    return buffer.toString();
  }


  /**
   * Replace param.
   *
   * @param template the template
   * @param pname the pname
   * @param pvalue the pvalue
   *
   * @return the string
   */
  private String replaceParam(String template, String pname, String pvalue) {
    logger.debug("IN");
    int index = -1;
    while( (index = template.indexOf("${" + pname + "}")) != -1) {
      template = template.replaceAll("\\$\\{" + pname + "\\}", pvalue);
    }
    logger.debug("OUT");
    return template;
  }

}
TOP

Related Classes of it.eng.spagobi.kpi.utils.BasicTemplateBuilder$NameRes

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.