<?xml version="1.0" encoding="UTF-8"?>
<action-sequence> 
  <title>%title</title>
  <version>1</version>
  <logging-level>ERROR</logging-level>
  <documentation> 
    <author>Michael D'Amour</author>  
    <description>%description</description>  
    <help>just testing...</help>  
    <result-type>report</result-type>  
    <icon>JFree-quadrant-budget-hsql.png</icon> 
  </documentation>

  <inputs>
    <output-type type="string"> 
      <default-value>html</default-value>  
      <sources> 
        <request>type</request> 
      </sources> 
    </output-type> 
  </inputs>

  <outputs/>

  <resources/>
  
  <actions> 
    <action-definition> 
      <component-name>SQLLookupRule</component-name>
      <action-type>SQL Query For Report Data</action-type>
      <action-outputs> 
        <query-result type="result-set"/> 
      </action-outputs>
      <component-definition> 
        <jndi>SampleData</jndi>  
        <live>true</live>  
        <query><![CDATA[select   QUADRANT_ACTUALS.REGION,   QUADRANT_ACTUALS.DEPARTMENT,   QUADRANT_ACTUALS.POSITIONTITLE,   QUADRANT_ACTUALS.ACTUAL,   QUADRANT_ACTUALS.BUDGET,   QUADRANT_ACTUALS.VARIANCE  from QUADRANT_ACTUALS order by QUADRANT_ACTUALS.REGION, QUADRANT_ACTUALS.DEPARTMENT]]></query> 
      </component-definition> 
    </action-definition>

    <action-definition> 
      <component-name>JavascriptRule</component-name>
      <action-type>JavaScript to Build JFreeReport Definition</action-type>
      <action-inputs>
        <resultset type="result-set" mapping="query-result"/> 
      </action-inputs>
      <action-outputs> 
        <report-definition type="string"/> 
      </action-outputs>
      <component-definition> 
        <script><![CDATA[ 
			    function getReportDefinition() { 
			      var reportSpec = new Packages.org.pentaho.jfreereport.castormodel.reportspec.ReportSpec();
			      //reportSpec.setUseRowBanding(false);
			      var regionField = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      regionField.setName("REGION");
			      regionField.setDisplayName("Region: $(REGION)");
			      regionField.setHorizontalAlignment("left");
			      regionField.setIsDetail(false);
			      reportSpec.addField(regionField);
			      
			      var deptField = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      deptField.setName("DEPARTMENT");
			      deptField.setDisplayName("Department");
			      deptField.setIsDetail(true);
			      deptField.setUseItemHide(true);
			      reportSpec.addField(deptField);

			      var positionField = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      positionField.setName("POSITIONTITLE");
			      positionField.setDisplayName("Position");
			      positionField.setIsDetail(true);
			      reportSpec.addField(positionField);

			      var actualField = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      actualField.setName("ACTUAL");
			      actualField.setDisplayName("Actual");
			      actualField.setIsDetail(true);
			      actualField.setType(Packages.java.sql.Types.NUMERIC);
			      actualField.setExpression("sum");
                  actualField.setHorizontalAlignment("right"); //$NON-NLS-1$
			      reportSpec.addField(actualField);

			      var budgetField = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      budgetField.setName("BUDGET");
			      budgetField.setDisplayName("Budget");
			      budgetField.setIsDetail(true);
			      budgetField.setType(Packages.java.sql.Types.NUMERIC);
			      budgetField.setExpression("sum");
                  budgetField.setHorizontalAlignment("right"); //$NON-NLS-1$
			      reportSpec.addField(budgetField);

			      var varCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
			      varCalc.setName("Difference");
			      varCalc.setDisplayName("Difference");
                              varCalc.setIsDetail(true);
			      varCalc.setType(Packages.java.sql.Types.NUMERIC);
                              varCalc.setExpression("sum");
			      varCalc.setIsCalculatedColumn(true);
			      varCalc.addCalculatedColumns("ACTUAL");
			      varCalc.addCalculatedColumns("BUDGET");
			      varCalc.setCalculatedColumnFunction("diff");
                  varCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
			      reportSpec.addField(varCalc);
			
                              var absvarCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              absvarCalc.setName("Absolute Difference");
                              absvarCalc.setDisplayName("Absolute Difference");
                              absvarCalc.setIsDetail(true);
                              absvarCalc.setType(Packages.java.sql.Types.NUMERIC);
                              absvarCalc.setExpression("sum");
                              absvarCalc.setIsCalculatedColumn(true);
                              absvarCalc.addCalculatedColumns("ACTUAL");
                              absvarCalc.addCalculatedColumns("BUDGET");
                              absvarCalc.setCalculatedColumnFunction("absdiff");
                              absvarCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(absvarCalc);



                              var sumCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              sumCalc.setName("Sum");
                              sumCalc.setDisplayName("Sum");
                              sumCalc.setIsDetail(true);
                              sumCalc.setType(Packages.java.sql.Types.NUMERIC);
                              sumCalc.setIsCalculatedColumn(true);
                              sumCalc.addCalculatedColumns("ACTUAL");
                              sumCalc.addCalculatedColumns("BUDGET");
                              sumCalc.setCalculatedColumnFunction("sum");
                              sumCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(sumCalc);


                              var minCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              minCalc.setName("Min");
                              minCalc.setDisplayName("Min");
                              minCalc.setIsDetail(true);
                              minCalc.setType(Packages.java.sql.Types.NUMERIC);
                              minCalc.setIsCalculatedColumn(true);
                              minCalc.addCalculatedColumns("ACTUAL");
                              minCalc.addCalculatedColumns("BUDGET");
                              minCalc.setCalculatedColumnFunction("min");
                              minCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(minCalc);

     
                              var maxCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              maxCalc.setName("Max");
                              maxCalc.setDisplayName("Max");
                              maxCalc.setIsDetail(true);
                              maxCalc.setType(Packages.java.sql.Types.NUMERIC);
                              maxCalc.setIsCalculatedColumn(true);
                              maxCalc.addCalculatedColumns("ACTUAL");
                              maxCalc.addCalculatedColumns("BUDGET");
                              maxCalc.setCalculatedColumnFunction("max");
                              maxCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(maxCalc);

                              var avgCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              avgCalc.setName("Average");
                              avgCalc.setDisplayName("Average");
                              avgCalc.setIsDetail(true);
                              avgCalc.setType(Packages.java.sql.Types.NUMERIC);
                              avgCalc.setIsCalculatedColumn(true);
                              avgCalc.addCalculatedColumns("ACTUAL");
                              avgCalc.addCalculatedColumns("BUDGET");
                              avgCalc.setCalculatedColumnFunction("avg");
                              avgCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(avgCalc);

                              var multCalc = new Packages.org.pentaho.jfreereport.castormodel.reportspec.Field();
                              multCalc.setName("Multiply");
                              multCalc.setDisplayName("Multiply");                               
			                  multCalc.setIsDetail(true);
                              multCalc.setType(Packages.java.sql.Types.NUMERIC);
                              multCalc.setIsCalculatedColumn(true);
                              multCalc.addCalculatedColumns("ACTUAL");
                              multCalc.addCalculatedColumns("BUDGET");
                              multCalc.setCalculatedColumnFunction("mult");
                              multCalc.setFormat("#,###.##");
                              multCalc.setHorizontalAlignment("right"); //$NON-NLS-1$
                              reportSpec.addField(multCalc);

      			  var retStr = Packages.org.pentaho.jfreereport.wizard.utility.report.ReportGenerationUtility.createJFreeReportXML(reportSpec, "UTF-8" );
			return retStr;
			    } 
			    getReportDefinition(); 
		      ]]> </script> 
      </component-definition> 
    </action-definition>
  
    <action-definition> 
      <component-name>JFreeReportComponent</component-name>
      <action-type>Create Report Using Query Results</action-type>
      <action-inputs> 
        <data type="result-set" mapping="query-result"/> 
        <report-definition type="string"/>
        <output-type type="string"/>
      </action-inputs>
      <action-resources/> 
      <component-definition> 
        <output-type>html</output-type> 
      </component-definition> 
    </action-definition>
 
  </actions> 
</action-sequence>