@Override
  public JRDesignComponentElement createJRElement(JasperDesign jasperDesign) {
    JRDesignComponentElement el = new JRDesignComponentElement();
    UPCAComponent component = new UPCAComponent();
    JRDesignExpression exp = new JRDesignExpression();
    exp.setText("\"12345678901\""); // $NON-NLS-1$
    component.setCodeExpression(exp);
    el.setComponent(component);
    el.setComponentKey(
        new ComponentKey(
            "http://jasperreports.sourceforge.net/jasperreports/components",
            "jr",
            "UPCA")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

    DefaultManager.INSTANCE.applyDefault(this.getClass(), el);

    return el;
  }
  public static JasperDesign enrichJasperDesign(JasperDesign jasperDesign, String[] columns)
      throws JRException {

    JRDesignField field;
    JRDesignStaticText staticText;

    JRDesignFrame frame = new JRDesignFrame();
    JRDesignTextField textField;
    // Bands

    JRDesignBand band = new JRDesignBand();
    band.setHeight(20);
    //		jasperDesign.setColumnHeader(band);
    int c = 0;
    for (String column : columns) {
      field = createField(column);
      field.setValueClass(java.lang.String.class);
      jasperDesign.addField(field);

      staticText = createStaticText(column, 0, 0);
      staticText.setStyle(createBoldStyle(9));
      band.addElement(staticText);
      jasperDesign.setColumnHeader(band);
      //			frame.addElement(staticText);

      band = new JRDesignBand();
      band.setHeight(20);
      textField = createTextField(0, 4);
      textField.setStretchWithOverflow(true);
      textField.setStyle(createNormalStyle(9));

      JRDesignExpression expression = new JRDesignExpression();
      expression.setText("$F{" + column + "}");
      textField.setExpression(expression);
      band.addElement(textField);
    }

    //		= createTextField(0, 4);
    //		band.addElement(textField);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);

    return jasperDesign;
  }
  private static JasperDesign getJasperDesign(List<PropertyDescriptor> props) throws JRException {
    // JasperDesign
    JasperDesign jasperDesign = new JasperDesign();
    jasperDesign.setName("NoXmlDesignReport");
    jasperDesign.setPageWidth(595);
    jasperDesign.setPageHeight(842);
    jasperDesign.setColumnWidth(515);
    jasperDesign.setColumnSpacing(0);
    jasperDesign.setColumnCount(1);
    jasperDesign.setLeftMargin(40);
    jasperDesign.setRightMargin(40);
    jasperDesign.setTopMargin(50);
    jasperDesign.setBottomMargin(50);

    // Fonts
    JRDesignStyle normalStyle = new JRDesignStyle();
    normalStyle.setName("Sans_Normal");
    normalStyle.setDefault(true);
    normalStyle.setFontName("DejaVu Sans");
    normalStyle.setFontSize(12);
    normalStyle.setPdfFontName("Helvetica");
    normalStyle.setPdfEncoding("Cp1252");
    normalStyle.setPdfEmbedded(false);
    jasperDesign.addStyle(normalStyle);

    JRDesignStyle boldStyle = new JRDesignStyle();
    boldStyle.setName("Sans_Bold");
    boldStyle.setFontName("DejaVu Sans");
    boldStyle.setFontSize(12);
    boldStyle.setBold(true);
    boldStyle.setPdfFontName("Helvetica-Bold");
    boldStyle.setPdfEncoding("Cp1252");
    boldStyle.setPdfEmbedded(false);
    jasperDesign.addStyle(boldStyle);

    JRDesignStyle italicStyle = new JRDesignStyle();
    italicStyle.setName("Sans_Italic");
    italicStyle.setFontName("DejaVu Sans");
    italicStyle.setFontSize(12);
    italicStyle.setItalic(true);
    italicStyle.setPdfFontName("Helvetica-Oblique");
    italicStyle.setPdfEncoding("Cp1252");
    italicStyle.setPdfEmbedded(false);
    jasperDesign.addStyle(italicStyle);

    // Parameters
    JRDesignParameter parameter = new JRDesignParameter();
    parameter.setName("ReportTitle");
    parameter.setValueClass(java.lang.String.class);
    jasperDesign.addParameter(parameter);

    // Fields
    int i = 1;
    for (PropertyDescriptor p : props) {
      JRDesignField field = new JRDesignField();
      field.setName(p.getName());
      field.setValueClass(resolveType(p));
      jasperDesign.addField(field);
      i++;
    }

    // Title
    JRDesignBand band = new JRDesignBand();
    band.setHeight(50);

    JRDesignTextField textField = new JRDesignTextField();
    textField.setBlankWhenNull(true);
    textField.setX(0);
    textField.setY(20);
    textField.setWidth(510);
    textField.setHeight(30);
    textField.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
    textField.setStyle(normalStyle);
    textField.setFontSize(22);
    JRDesignExpression expression = new JRDesignExpression();
    expression.setValueClass(java.lang.String.class);
    expression.setText("$P{ReportTitle}");
    textField.setExpression(expression);
    band.addElement(textField);
    jasperDesign.setTitle(band);

    // Page header
    band = new JRDesignBand();
    band.setHeight(20);
    int x = 0;
    for (PropertyDescriptor p : props) {
      JRDesignStaticText staticText = new JRDesignStaticText();
      staticText.setX(x);
      staticText.setY(0);

      if (p.getName().equals("message")) {
        staticText.setWidth(400);
        x += 400;
      } else {
        staticText.setWidth(100);
        x += 100;
      }
      staticText.setHeight(20);
      staticText.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
      staticText.setVerticalAlignment(JRAlignment.VERTICAL_ALIGN_MIDDLE);
      staticText.setStyle(boldStyle);
      staticText.setStretchType(JRDesignStaticText.STRETCH_TYPE_RELATIVE_TO_TALLEST_OBJECT);

      staticText.setText(p.getDisplayName());
      band.addElement(staticText);
    }

    jasperDesign.setPageHeader(band);

    // Column header
    band = new JRDesignBand();
    jasperDesign.setColumnHeader(band);

    band = new JRDesignBand();
    band.setHeight(25);
    x = 0;
    for (PropertyDescriptor p : props) {
      textField = new JRDesignTextField();
      textField.setX(x);
      textField.setY(0);
      if (p.getName().equals("message")) {
        textField.setWidth(400);
        x += 400;
      } else {
        textField.setWidth(100);
        x += 100;
      }
      textField.setHeight(20);
      textField.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
      textField.setVerticalAlignment(JRAlignment.VERTICAL_ALIGN_MIDDLE);
      textField.setStyle(normalStyle);
      expression = new JRDesignExpression();
      Class type = resolveType(p);
      expression.setValueClass(type);
      expression.setText("$F{" + p.getName() + "}");
      textField.setExpression(expression);
      textField.setStretchWithOverflow(true);
      band.addElement(textField);
    }

    jasperDesign.setDetail(band);

    // Column footer
    band = new JRDesignBand();
    jasperDesign.setColumnFooter(band);

    // Page footer
    band = new JRDesignBand();
    jasperDesign.setPageFooter(band);

    // Summary
    band = new JRDesignBand();
    jasperDesign.setSummary(band);

    return jasperDesign;
  }
  public static JasperDesign getJasperDesign() throws JRException {

    // JasperDesign
    JasperDesign jasperDesign = new JasperDesign();
    jasperDesign.setName("ReqIF_Report");
    jasperDesign.setPageWidth(595);
    jasperDesign.setPageHeight(842);
    jasperDesign.setColumnWidth(515);
    jasperDesign.setColumnSpacing(0);
    jasperDesign.setLeftMargin(40);
    jasperDesign.setRightMargin(40);
    jasperDesign.setTopMargin(50);
    jasperDesign.setBottomMargin(50);

    // Fonts
    JRDesignStyle normalStyle = createNormalStyle(9);
    jasperDesign.addStyle(normalStyle);

    JRDesignStyle boldStyle = createBoldStyle(9);
    jasperDesign.addStyle(boldStyle);

    JRDesignStyle italicStyle = createItalicStyle(9);
    jasperDesign.addStyle(italicStyle);

    // Parameters
    JRDesignParameter parameter = new JRDesignParameter();
    parameter.setName("ReportTitle");
    parameter.setValueClass(java.lang.String.class);
    jasperDesign.addParameter(parameter);

    // Query
    JRDesignQuery query = new JRDesignQuery();
    query.setText("");
    jasperDesign.setQuery(query);

    // Fields
    JRDesignField field = createField("Id");
    jasperDesign.addField(field);

    field = createField("FirstName");
    jasperDesign.addField(field);

    field = createField("LastName");
    jasperDesign.addField(field);

    field = createField("City");
    jasperDesign.addField(field);

    field = createField("Street");
    jasperDesign.addField(field);
    // Bands

    JRDesignBand band = new JRDesignBand();
    band.setHeight(20);

    JRDesignTextField textField = createTextField(0, 4);

    band.addElement(textField);
    JRDesignLine line = createLine(0, 19);
    band.addElement(line);

    band = new JRDesignBand();
    band.setHeight(20);
    line = createLine(0, -1);
    band.addElement(line);

    JRDesignStaticText staticText = new JRDesignStaticText();

    //		band.addElement(staticText);

    //		band.addElement(textField);

    // Page header
    band = new JRDesignBand();
    band.setHeight(20);
    JRDesignFrame frame = new JRDesignFrame();
    frame.setX(0);
    frame.setY(5);
    frame.setWidth(515);
    frame.setHeight(15);
    frame.setForecolor(new Color(0x33, 0x33, 0x33));
    frame.setBackcolor(new Color(0x33, 0x33, 0x33));
    frame.setMode(ModeEnum.OPAQUE);
    band.addElement(frame);

    staticText = createStaticText("ID", 0, 0);
    staticText.setStyle(createBoldStyle(9));
    frame.addElement(staticText);

    staticText = createStaticText("Name", 111, 0);
    staticText.setStyle(createBoldStyle(9));
    frame.addElement(staticText);

    staticText = createStaticText("Street", 260, 0);
    staticText.setStyle(createBoldStyle(9));
    frame.addElement(staticText);

    jasperDesign.setPageHeader(band);

    // Column header
    band = new JRDesignBand();
    jasperDesign.setColumnHeader(band);

    // Detail
    band = new JRDesignBand();
    band.setHeight(20);

    textField = new JRDesignTextField();
    textField.setX(0);
    textField.setY(4);
    textField.setWidth(50);
    textField.setHeight(15);
    textField.setHorizontalAlignment(HorizontalAlignEnum.RIGHT);
    textField.setStyle(normalStyle);

    JRDesignExpression expression = new JRDesignExpression();
    expression.setText("$F{Id}");
    textField.setExpression(expression);
    band.addElement(textField);

    textField = new JRDesignTextField();
    textField.setStretchWithOverflow(true);
    textField.setX(55);
    textField.setY(4);
    textField.setWidth(200);
    textField.setHeight(15);
    textField.setPositionType(PositionTypeEnum.FLOAT);
    textField.setStyle(normalStyle);
    band.addElement(textField);
    textField = new JRDesignTextField();
    textField.setStretchWithOverflow(true);
    textField.setX(260);
    textField.setY(4);
    textField.setWidth(255);
    textField.setHeight(15);
    textField.setPositionType(PositionTypeEnum.FLOAT);
    textField.setStyle(normalStyle);
    band.addElement(textField);

    line = new JRDesignLine();
    line.setX(0);
    line.setY(19);
    line.setWidth(515);
    line.setHeight(0);
    line.setForecolor(new Color(0x80, 0x80, 0x80));
    line.setPositionType(PositionTypeEnum.FLOAT);
    band.addElement(line);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);

    // Column footer
    band = new JRDesignBand();
    // jasperDesign.setColumnFooter(band);

    // Page footer
    band = new JRDesignBand();
    // jasperDesign.setPageFooter(band);

    // Summary
    band = new JRDesignBand();
    // jasperDesign.setSummary(band);

    return jasperDesign;
  }
 public static JRDesignExpression createExpression(String expr) {
   JRDesignExpression expression = new JRDesignExpression();
   //	expression.setValueClass(java.lang.Integer.class);
   expression.setText("$F{" + expr + "}");
   return expression;
 }
 protected JRDesignTextField createJRTextField(
     String key,
     String expression,
     int x,
     int y,
     int w,
     int h,
     String fontName,
     int fontSize,
     int fontStyle) {
   JRDesignTextField txf = new JRDesignTextField();
   //        if (!print && drawBounds) {
   //            txf.setBorder((byte) 1);
   //        }
   txf.setStretchWithOverflow(false);
   txf.setBlankWhenNull(true);
   txf.setEvaluationTime(JRExpression.EVALUATION_TIME_NOW);
   txf.setHyperlinkType(JRDesignTextField.HYPERLINK_TYPE_NONE);
   txf.setForecolor(Color.BLACK);
   txf.setBackcolor(Color.WHITE);
   txf.setKey(key);
   txf.setStretchType(JRElement.STRETCH_TYPE_NO_STRETCH);
   txf.setPositionType(JRElement.POSITION_TYPE_FIX_RELATIVE_TO_TOP);
   txf.setPrintRepeatedValues(true);
   txf.setRemoveLineWhenBlank(false);
   txf.setPrintInFirstWholeBand(false);
   txf.setPrintWhenDetailOverflows(false);
   txf.setHorizontalAlignment(JRTextElement.HORIZONTAL_ALIGN_CENTER); // textAlignment
   txf.setVerticalAlignment((JRTextElement.VERTICAL_ALIGN_TOP));
   txf.setRotation(JRTextElement.ROTATION_NONE);
   txf.setLineSpacing(JRTextElement.LINE_SPACING_SINGLE);
   txf.setMode(JRTextElement.MODE_OPAQUE);
   JRDesignExpression txfValue = new JRDesignExpression();
   txfValue.setValueClass(String.class);
   txfValue.setText(expression);
   txf.setExpression(txfValue);
   txf.setX(x);
   txf.setY(y);
   txf.setWidth(w);
   txf.setHeight(h);
   //        JRReportFont font = new JRDesignReportFont();
   txf.setFontName(fontName);
   txf.setFontSize(fontSize);
   txf.setBold((fontStyle & Font.BOLD) != 0);
   txf.setItalic((fontStyle & Font.ITALIC) != 0);
   txf.setUnderline(false);
   txf.setPdfEmbedded(false);
   txf.setPdfEncoding("Cp1252");
   txf.setStrikeThrough(false);
   txf.setPdfFontName("Helvetica");
   JRReportFont rfont = new JRDesignReportFont();
   rfont.setFontName(fontName);
   rfont.setFontSize(fontSize);
   rfont.setBold((fontStyle & Font.BOLD) != 0);
   rfont.setItalic((fontStyle & Font.ITALIC) != 0);
   rfont.setUnderline(false);
   rfont.setPdfEmbedded(false);
   rfont.setPdfEncoding("Cp1252");
   rfont.setStrikeThrough(false);
   txf.setReportFont(rfont);
   rfont.setPdfFontName("Helvetica");
   JRDesignStyle style = new JRDesignStyle();
   style.setFontName(fontName);
   txf.setStyle(style);
   return txf;
 }
  protected Object transformEntity(Entity entity) {

    DJGroupVariable groupVariable = (DJGroupVariable) entity;
    AbstractColumn col = groupVariable.getColumnToApplyOperation();

    String variableName = groupVariable.getName();
    log.debug("transforming group variable " + variableName);
    DJCalculation op = groupVariable.getOperation();

    JRDesignExpression expression = new JRDesignExpression();

    // only variables from the last registered group are important now
    List groupsList = getDjd().getGroupsList();
    JRDesignGroup registeredGroup = (JRDesignGroup) groupsList.get(groupsList.size() - 1);

    if (col instanceof ExpressionColumn
        && ((ExpressionColumn) col).getExpressionForCalculation() != null) {
      ExpressionColumn expcol = (ExpressionColumn) col;
      expression.setText(expcol.getTextForExpressionForCalculartion());
      expression.setValueClassName(expcol.getExpressionForCalculation().getClassName());
    } else if (col instanceof PercentageColumn) {
      PercentageColumn pcol = (PercentageColumn) col;
      expression.setText(pcol.getPercentageColumn().getTextForExpression());
      expression.setValueClassName(pcol.getPercentageColumn().getValueClassNameForExpression());

      DJGroup djgroup = groupVariable.getGroup();
      registeredGroup =
          LayoutUtils.findParentJRGroup(djgroup, getDynamicReport(), getDjd(), getLayoutManager());
    } else {
      if (col.getTextFormatter() != null) {
        PropertyColumn pcol = (PropertyColumn) col;
        expression.setText("$F{" + pcol.getColumnProperty().getProperty() + "}");
        expression.setValueClassName(pcol.getColumnProperty().getValueClassName());
      } else {
        expression.setText(col.getTextForExpression());
        expression.setValueClassName(col.getValueClassNameForExpression());
      }
    }

    JRDesignVariable variable = new JRDesignVariable();
    variable.setExpression(expression);
    variable.setCalculation(CalculationEnum.getByValue(groupVariable.getOperation().getValue()));
    variable.setName(variableName);

    variable.setResetType(ResetTypeEnum.GROUP);
    variable.setResetGroup(registeredGroup);

    String valueClassName = col.getVariableClassName(op);
    String initialExpression = col.getInitialExpression(op);

    //		if (DJCalculation.SYSTEM.equals(groupVariable.getOperation())){
    //			variable.setValueClassName(Object.class.getName());
    //		} else {
    //		}
    variable.setValueClassName(valueClassName);

    if (initialExpression != null) {
      JRDesignExpression initialExp = new JRDesignExpression();
      initialExp.setText(initialExpression);
      initialExp.setValueClassName(valueClassName);
      variable.setInitialValueExpression(initialExp);
    }

    return variable;
  }