Package net.sf.jasperreports.compilers

Source Code of net.sf.jasperreports.compilers.JRBshGenerator

/*
* ============================================================================
*                   GNU Lesser General Public License
* ============================================================================
*
* JasperReports - Free Java report-generating library.
* Copyright (C) 2001-2005 Teodor Danciu teodord@users.sourceforge.net
*
* 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
*
* Teodor Danciu
* 173, Calea Calarasilor, Bl. 42, Sc. 1, Ap. 18
* Postal code 030615, Sector 3
* Bucharest, ROMANIA
* Email: teodord@users.sourceforge.net
*/
package net.sf.jasperreports.compilers;

import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.JRExpressionChunk;
import net.sf.jasperreports.engine.JRField;
import net.sf.jasperreports.engine.JRParameter;
import net.sf.jasperreports.engine.JRVariable;
import net.sf.jasperreports.engine.design.JasperDesign;


/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRBshGenerator.java,v 1.1 2005/05/23 08:26:24 sherifo Exp $
*/
public class JRBshGenerator
{
 
 
  /**
   *
   */
  private JasperDesign jasperDesign = null;

  private static Map fieldPrefixMap = null;
  private static Map variablePrefixMap = null;
  private static Map methodSuffixMap = null;


  /**
   *
   */
  protected JRBshGenerator(JasperDesign jrDesign)
  {
    jasperDesign = jrDesign;

    fieldPrefixMap = new HashMap();
    fieldPrefixMap.put(new Byte(JRExpression.EVALUATION_OLD),       "Old");
    fieldPrefixMap.put(new Byte(JRExpression.EVALUATION_ESTIMATED), "");
    fieldPrefixMap.put(new Byte(JRExpression.EVALUATION_DEFAULT),   "");
   
    variablePrefixMap = new HashMap();
    variablePrefixMap.put(new Byte(JRExpression.EVALUATION_OLD),       "Old");
    variablePrefixMap.put(new Byte(JRExpression.EVALUATION_ESTIMATED), "Estimated");
    variablePrefixMap.put(new Byte(JRExpression.EVALUATION_DEFAULT),   "");
   
    methodSuffixMap = new HashMap();
    methodSuffixMap.put(new Byte(JRExpression.EVALUATION_OLD),       "Old");
    methodSuffixMap.put(new Byte(JRExpression.EVALUATION_ESTIMATED), "Estimated");
    methodSuffixMap.put(new Byte(JRExpression.EVALUATION_DEFAULT),   "");
  }


  /**
   *
   */
  public static String generateScript(JasperDesign jrDesign) throws JRException
  {
    JRBshGenerator generator = new JRBshGenerator(jrDesign);
    return generator.generateScript();
  }


  /**
   *
   */
  protected String generateScript() throws JRException
  {
    StringBuffer sb = new StringBuffer();

    /*   */
    sb.append("//\n");
    sb.append("// Generated by JasperReports - ");
    sb.append((new SimpleDateFormat()).format(new java.util.Date()));
    sb.append("\n");
    sb.append("//\n");
    sb.append("import net.sf.jasperreports.engine.*;\n");
    sb.append("import net.sf.jasperreports.engine.fill.*;\n");
    sb.append("\n");
    sb.append("import java.util.*;\n");
    sb.append("import java.math.*;\n");
    sb.append("import java.text.*;\n");
    sb.append("import java.io.*;\n");
    sb.append("import java.net.*;\n");
    sb.append("\n");
   
    /*   */
    String[] imports = jasperDesign.getImports();
    if (imports != null && imports.length > 0)
    {
      for (int i = 0; i < imports.length; i++)
      {
        sb.append("import ");
        sb.append(imports[i]);
        sb.append(";\n");
      }
    }

    /*   */
    sb.append("\n");
    sb.append("\n");
    sb.append("createBshCalculator()\n");
    sb.append("{\n");
    sb.append("\n");
    sb.append("\n");
    sb.append("    JRCalculator calculator = null;\n");
    sb.append("\n");

    /*   */
    Map parametersMap = jasperDesign.getParametersMap();
    if (parametersMap != null && parametersMap.size() > 0)
    {
      Collection parameterNames = parametersMap.keySet();
      for (Iterator it = parameterNames.iterator(); it.hasNext();)
      {
        sb.append("    JRFillParameter parameter_");
        sb.append(it.next());
        sb.append(" = null;\n");
      }
    }
   
    /*   */
    sb.append("\n");

    /*   */
    Map fieldsMap = jasperDesign.getFieldsMap();
    if (fieldsMap != null && fieldsMap.size() > 0)
    {
      Collection fieldNames = fieldsMap.keySet();
      for (Iterator it = fieldNames.iterator(); it.hasNext();)
      {
        sb.append("    JRFillField field_");
        sb.append(it.next());
        sb.append(" = null;\n");
      }
    }
   
    /*   */
    sb.append("\n");

    /*   */
    JRVariable[] variables = jasperDesign.getVariables();
    if (variables != null && variables.length > 0)
    {
      for (int i = 0; i < variables.length; i++)
      {
        sb.append("    JRFillVariable variable_");
        sb.append(variables[i].getName());
        sb.append(" = null;\n");
      }
    }

    /*   */
    sb.append("\n");
    sb.append("\n");
    sb.append("    init(\n");
    sb.append("        JRCalculator calculator,\n");
    sb.append("        Map parsm,\n");
    sb.append("        Map fldsm,\n");
    sb.append("        Map varsm\n");
    sb.append("        )\n");
    sb.append("    {\n");
    sb.append("        super.calculator = calculator;\n");
    sb.append("\n");

    /*   */
    parametersMap = jasperDesign.getParametersMap();
    if (parametersMap != null && parametersMap.size() > 0)
    {
      Collection parameterNames = parametersMap.keySet();
      String parameterName = null;
      for (Iterator it = parameterNames.iterator(); it.hasNext();)
      {
        parameterName = (String)it.next();
        sb.append("        super.parameter_");
        sb.append(parameterName);
        sb.append(" = (JRFillParameter)parsm.get(\"");
        sb.append(parameterName);
        sb.append("\");\n");
      }
    }
   
    /*   */
    sb.append("\n");

    /*   */
    fieldsMap = jasperDesign.getFieldsMap();
    if (fieldsMap != null && fieldsMap.size() > 0)
    {
      Collection fieldNames = fieldsMap.keySet();
      String fieldName = null;
      for (Iterator it = fieldNames.iterator(); it.hasNext();)
      {
        fieldName = (String)it.next();
        sb.append("        super.field_");
        sb.append(fieldName);
        sb.append(" = (JRFillField)fldsm.get(\"");
        sb.append(fieldName);
        sb.append("\");\n");
      }
    }
   
    /*   */
    sb.append("\n");

    /*   */
    variables = jasperDesign.getVariables();
    if (variables != null && variables.length > 0)
    {
      String variableName = null;
      for (int i = 0; i < variables.length; i++)
      {
        variableName = variables[i].getName();
        sb.append("        super.variable_");
        sb.append(variableName);
        sb.append(" = (JRFillVariable)varsm.get(\"");
        sb.append(variableName);
        sb.append("\");\n");
      }
    }

    /*   */
    sb.append("    }\n");
    sb.append("\n");
    sb.append("\n");

    sb.append(this.generateMethod(JRExpression.EVALUATION_DEFAULT));
    sb.append(this.generateMethod(JRExpression.EVALUATION_OLD));
    sb.append(this.generateMethod(JRExpression.EVALUATION_ESTIMATED));

    sb.append("\n");
    sb.append("    str(String key)\n");
    sb.append("    {\n");
    sb.append("        return super.calculator.str(key);\n");
    sb.append("    }\n");
    sb.append("\n");
    sb.append("    msg(String pattern, Object arg0)\n");
    sb.append("    {\n");
    sb.append("        return super.calculator.msg(pattern, arg0);\n");
    sb.append("    }\n");
    sb.append("\n");
    sb.append("    msg(String pattern, Object arg0, Object arg1)\n");
    sb.append("    {\n");
    sb.append("        return super.calculator.msg(pattern, arg0, arg1);\n");
    sb.append("    }\n");
    sb.append("\n");
    sb.append("    msg(String pattern, Object arg0, Object arg1, Object arg2)\n");
    sb.append("    {\n");
    sb.append("        return super.calculator.msg(pattern, arg0, arg1, arg2);\n");
    sb.append("    }\n");
    sb.append("\n");
    sb.append("    return this;\n");
    sb.append("}\n");

    return sb.toString();
  }   


  /**
   *
   */
  private String generateMethod(byte evaluationType) throws JRException
  {
    StringBuffer sb = new StringBuffer();

    /*   */
    sb.append("    Object evaluate");
    sb.append((String)methodSuffixMap.get(new Byte(evaluationType)));
    sb.append("(int id)\n");
    sb.append("    {\n");
    sb.append("        Object value = null;\n");
    sb.append("\n");
    sb.append("        switch (id)\n");
    sb.append("        {\n");

    Collection expressions = jasperDesign.getExpressions();
    if (expressions != null && expressions.size() > 0)
    {
      JRExpression expression = null;
      for (Iterator it = expressions.iterator(); it.hasNext();)
      {
        expression = (JRExpression)it.next();
       
        sb.append("            case ");
        sb.append(expression.getId());
        sb.append(" : // ");
        sb.append(expression.getName());
        sb.append("\n");
        sb.append("            {\n");
        sb.append("                value = (");
        sb.append(expression.getValueClassName());
        sb.append(")(");
        sb.append(this.generateExpression(expression, evaluationType));
        sb.append(");\n");
        sb.append("                break;\n");
        sb.append("            }\n");
      }
    }

    /*   */
    sb.append("           default :\n");
    sb.append("           {\n");
    sb.append("           }\n");
    sb.append("        }\n");
    sb.append("        \n");
    sb.append("        return value;\n");
    sb.append("    }\n");
    sb.append("\n");
    sb.append("\n");
   
    return sb.toString();
  }


  /**
   *
   */
  private String generateExpression(
    JRExpression expression,
    byte evaluationType
    ) throws JRException
  {
    Map parametersMap = jasperDesign.getParametersMap();
    Map fieldsMap = jasperDesign.getFieldsMap();
    Map variablesMap = jasperDesign.getVariablesMap();

    JRParameter jrParameter = null;
    JRField jrField = null;
    JRVariable jrVariable = null;

    StringBuffer sbuffer = new StringBuffer();

    JRExpressionChunk[] chunks = expression.getChunks();
    JRExpressionChunk chunk = null;
    String chunkText = null;
    if (chunks != null && chunks.length > 0)
    {
      for(int i = 0; i < chunks.length; i++)
      {
        chunk = chunks[i];

        chunkText = chunk.getText();
        if (chunkText == null)
        {
          chunkText = "";
        }
       
        switch (chunk.getType())
        {
          case JRExpressionChunk.TYPE_TEXT :
          {
            sbuffer.append(chunkText);
            break;
          }
          case JRExpressionChunk.TYPE_PARAMETER :
          {
            jrParameter = (JRParameter)parametersMap.get(chunkText);
 
            sbuffer.append("((");
            sbuffer.append(jrParameter.getValueClassName());
            sbuffer.append(")super.parameter_");
            sbuffer.append(chunkText);
            sbuffer.append(".getValue())");
 
            break;
          }
          case JRExpressionChunk.TYPE_FIELD :
          {
            jrField = (JRField)fieldsMap.get(chunkText);
 
            sbuffer.append("((");
            sbuffer.append(jrField.getValueClassName());
            sbuffer.append(")super.field_");
            sbuffer.append(chunkText);
            sbuffer.append(".get");
            sbuffer.append((String)fieldPrefixMap.get(new Byte(evaluationType)));
            sbuffer.append("Value())");
 
            break;
          }
          case JRExpressionChunk.TYPE_VARIABLE :
          {
            jrVariable = (JRVariable)variablesMap.get(chunkText);
 
            sbuffer.append("((");
            sbuffer.append(jrVariable.getValueClassName());
            sbuffer.append(")super.variable_");
            sbuffer.append(chunkText);
            sbuffer.append(".get");
            sbuffer.append((String)variablePrefixMap.get(new Byte(evaluationType)));
            sbuffer.append("Value())");
 
            break;
          }
          case JRExpressionChunk.TYPE_RESOURCE :
          {
            jrParameter = (JRParameter)parametersMap.get(chunkText);
 
            sbuffer.append("super.calculator.str(\"");
            sbuffer.append(chunkText);
            sbuffer.append("\")");
 
            break;
          }
        }
      }
    }
   
    if (sbuffer.length() == 0)
    {
      sbuffer.append("null");
    }

    return sbuffer.toString();
  }


}
TOP

Related Classes of net.sf.jasperreports.compilers.JRBshGenerator

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.