docs: protected JRDesignTextField generateTextFieldFromColumn(AbstractColumn col, int height, DJGroup group) {
          JRDesignTextField textField = new JRDesignTextField();
          JRDesignExpression exp = new JRDesignExpression();
  
          if (col.getPattern() != null && "".equals(col.getPattern().trim())) {
              textField.setPattern(col.getPattern());
          }
  
          if (col.getTruncateSuffix() != null) {
              textField.getPropertiesMap().setProperty(JRTextElement.PROPERTY_TRUNCATE_SUFFIX, col.getTruncateSuffix());
          }
  
          List<DJGroup> columnsGroups = getReport().getColumnsGroups();
          if (col instanceof PercentageColumn) {
              PercentageColumn pcol = (PercentageColumn) col;
  
              if (group == null) { //we are in the detail band
                  DJGroup innerMostGroup = columnsGroups.get(columnsGroups.size() - 1);
                  exp.setText(pcol.getTextForExpression(innerMostGroup));
              } else {
                  exp.setText(pcol.getTextForExpression(group));
              }
  
              textField.setEvaluationTime(EvaluationTimeEnum.AUTO);
          } else {
              exp.setText(col.getTextForExpression());
  
          }
  
          exp.setValueClassName(col.getValueClassNameForExpression());
          textField.setExpression(exp);
          textField.setWidth(col.getWidth());
          textField.setX(col.getPosX());
          textField.setY(col.getPosY());
          textField.setHeight(height);
  
          textField.setBlankWhenNull(col.isBlankWhenNull());
  
          textField.setPattern(col.getPattern());
  
          if (col.getMarkup() != null)
              textField.setMarkup(col.getMarkup().toLowerCase());
  
          textField.setPrintRepeatedValues(col.isPrintRepeatedValues());
  
          textField.setPrintWhenDetailOverflows(true);
  
          Style columnStyle = col.getStyle();
          if (columnStyle == null)
              columnStyle = report.getOptions().getDefaultDetailStyle();
  
          applyStyleToElement(columnStyle, textField);
          JRDesignStyle jrstyle = (JRDesignStyle) textField.getStyle();
  
          if (group != null) {
              int index = columnsGroups.indexOf(group);
  //            JRDesignGroup previousGroup = (JRDesignGroup) getDesign().getGroupsList().get(index);
              JRDesignGroup previousGroup = getJRGroupFromDJGroup(group);
              textField.setPrintWhenGroupChanges(previousGroup);
  
              /*
                Since a group column can share the style with non group columns, if oddRow coloring is enabled,
                we modified this shared style to have a colored background on odd rows. We don't want that for group
                columns, that's why we create our own style from the existing one, and remove proper odd-row conditional
                style if present
               */
              JRDesignStyle groupStyle = Utils.cloneStyle(jrstyle);
  
              groupStyle.setName(groupStyle.getFontName() + "_for_group_" + index + "_");
              textField.setStyle(groupStyle);
              try {
                  design.addStyle(groupStyle);
              } catch (JRException e) { /*e.printStackTrace(); //Already there, nothing to do **/}
  
          } else {
  
              JRDesignStyle alternateStyle = Utils.cloneStyle(jrstyle);
  
              alternateStyle.setName(alternateStyle.getFontName() + "_for_column_" + col.getName() + "_");
              alternateStyle.getConditionalStyleList().clear();
              textField.setStyle(alternateStyle);
              try {
                  design.addStyle(alternateStyle);
              } catch (JRException e) { /*e.printStackTrace(); //Already there, nothing to do **/}
  
  
              setUpConditionStyles(alternateStyle, col);
          	/*
          	if (getReport().getOptions().isPrintBackgroundOnOddRows() &&
          			(jrstyle.getConditionalStyles() == null || jrstyle.getConditionalStyles().length == 0)) {
  	        	// No group column so this is a detail text field
  	    		JRDesignExpression expression = new JRDesignExpression();
  	    		expression.setValueClass(Boolean.class);
  	    		expression.setText(EXPRESSION_TRUE_WHEN_ODD);
  
  	    		Style oddRowBackgroundStyle = getReport().getOptions().getOddRowBackgroundStyle();
  
  	    		JRDesignConditionalStyle condStyle = new JRDesignConditionalStyle();
  	    		condStyle.setBackcolor(oddRowBackgroundStyle.getBackgroundColor());
  	    		condStyle.setMode(JRDesignElement.MODE_OPAQUE);
  
  	    		condStyle.setConditionExpression(expression);
  	    		jrstyle.addConditionalStyle(condStyle);
          	}*/
          }
          return textField;
      }