Program: 118120
Project: 118120
Buggy source:
private void saveElementParameter(IElementParameter param,ProcessType process,TalendFileFactory fileFact,List<? extends IElementParameter> paramList,EList listParamType){
  ElementParameterType pType;
  boolean isJoblet=false;
  if (param.getElement() instanceof INode && PluginChecker.isJobLetPluginLoaded()) {
    IJobletProviderService service=(IJobletProviderService)GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
    if (service != null && service.isJobletComponent((INode)param.getElement())) {
      isJoblet=true;
    }
  }
  if (param.isValueSetToDefault()) {
    return;
  }
  if (param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE) || param.getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)|| param.getFieldType().equals(EParameterFieldType.VALIDATION_RULE_TYPE)|| param.getName().equals(EParameterName.UPDATE_COMPONENTS.getName())) {
    return;
  }
  if (param.getParentParameter() != null) {
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.PROPERTY_TYPE.getName());
      if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.SCHEMA_TYPE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.SCHEMA_TYPE.getName());
      if (isJoblet && param.getName().equals(EParameterName.CONNECTION.getName())) {
      }
 else       if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.VALIDATION_RULE_TYPE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.VALIDATION_RULE_TYPE.getName());
      if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
  }
  if (param.getElement() instanceof Process) {
    if (param.isReadOnly() && param.getCategory() == EComponentCategory.TECHNICAL) {
      return;
    }
    if (isJoblet) {
      if (param != null && !(param.getName().equals(EParameterName.STARTABLE.getName()))) {
        return;
      }
    }
  }
  if (param.getElement() instanceof Node) {
    if (param != null && param.getName().equals(EParameterName.REPOSITORY_ALLOW_AUTO_SWITCH.getName())) {
      return;
    }
    if (param.isReadOnly() && param.getCategory() == EComponentCategory.TECHNICAL) {
      return;
    }
  }
  pType=fileFact.createElementParameterType();
  if (param.getParentParameter() != null) {
    pType.setName(param.getParentParameter().getName() + "String_Node_Str" + param.getName());
  }
 else {
    pType.setName(param.getName());
  }
  pType.setField(param.getFieldType().getName());
  if (param.isContextMode()) {
    pType.setContextMode(param.isContextMode());
  }
  Object value=param.getValue();
  if (param.getFieldType().equals(EParameterFieldType.TABLE) && value != null) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    for (    Map<String,Object> currentLine : tableValues) {
      for (int i=0; i < param.getListItemsDisplayCodeName().length; i++) {
        boolean isHexValue=false;
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(param.getListItemsDisplayCodeName()[i]);
        Object o=currentLine.get(param.getListItemsDisplayCodeName()[i]);
        String strValue="String_Node_Str";
        IElementParameter tmpParam=null;
        Object[] listItemsValue=param.getListItemsValue();
        if (listItemsValue.length > i) {
          tmpParam=(IElementParameter)listItemsValue[i];
        }
        if (o instanceof Integer && tmpParam != null) {
          if (tmpParam.getListItemsValue().length == 0) {
            strValue="String_Node_Str";
          }
 else {
            strValue=(String)tmpParam.getListItemsValue()[(Integer)o];
          }
        }
 else {
          if (o instanceof String) {
            strValue=(String)o;
            isHexValue=isNeedConvertToHex(strValue);
            if (isHexValue) {
              try {
                strValue=Hex.encodeHexString(strValue.getBytes(UTF8));
              }
 catch (              UnsupportedEncodingException e) {
                ExceptionHandler.process(e);
              }
            }
          }
 else {
            if (o instanceof Boolean) {
              strValue=((Boolean)o).toString();
            }
          }
        }
        if (tmpParam != null && tmpParam.getFieldType().equals(EParameterFieldType.PASSWORD)) {
          elementValue.setValue(strValue,true);
        }
 else {
          elementValue.setValue(strValue);
        }
        if (isHexValue) {
          elementValue.setHexValue(true);
        }
        Object object=currentLine.get(param.getListItemsDisplayCodeName()[i] + IEbcdicConstant.REF_TYPE);
        if (object != null) {
          elementValue.setType((String)object);
        }
        pType.getElementValue().add(elementValue);
      }
    }
  }
 else   if (param.getFieldType().equals(EParameterFieldType.TABLE_BY_ROW) && value != null) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    for (    Map<String,Object> currentLine : tableValues) {
      Iterator it=currentLine.keySet().iterator();
      while (it.hasNext()) {
        String key=(String)it.next();
        if (!(currentLine.get(key) instanceof String)) {
          continue;
        }
        String expression=(String)currentLine.get(key);
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(key);
        elementValue.setValue(expression);
        pType.getElementValue().add(elementValue);
      }
    }
  }
 else   if (param.getFieldType().equals(EParameterFieldType.PASSWORD) && value instanceof String) {
    pType.setRawValue((String)value);
  }
 else {
    if (value == null) {
      pType.setValue("String_Node_Str");
    }
 else {
      if (value instanceof Boolean) {
        pType.setValue(((Boolean)value).toString());
      }
 else {
        if (value instanceof String) {
          pType.setValue((String)value);
        }
      }
    }
  }
  pType.setShow(param.isShow(paramList));
  listParamType.add(pType);
}

Fixed version (ground truth):
private void saveElementParameter(IElementParameter param,ProcessType process,TalendFileFactory fileFact,List<? extends IElementParameter> paramList,EList listParamType){
  ElementParameterType pType;
  boolean isJoblet=false;
  if (param.getElement() instanceof INode && PluginChecker.isJobLetPluginLoaded()) {
    IJobletProviderService service=(IJobletProviderService)GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
    if (service != null && service.isJobletComponent((INode)param.getElement())) {
      isJoblet=true;
    }
  }
  if (param.isValueSetToDefault()) {
    return;
  }
  if (param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE) || param.getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)|| param.getFieldType().equals(EParameterFieldType.VALIDATION_RULE_TYPE)|| param.getName().equals(EParameterName.UPDATE_COMPONENTS.getName())) {
    return;
  }
  if (param.getParentParameter() != null) {
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.PROPERTY_TYPE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.PROPERTY_TYPE.getName());
      if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getParentParameter().getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.SCHEMA_TYPE.getName());
      if (isJoblet && param.getName().equals(EParameterName.CONNECTION.getName())) {
      }
 else       if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
    if (param.getParentParameter().getFieldType().equals(EParameterFieldType.VALIDATION_RULE_TYPE)) {
      IElementParameter paramBuiltInRepository=param.getParentParameter().getChildParameters().get(EParameterName.VALIDATION_RULE_TYPE.getName());
      if (paramBuiltInRepository.getValue().equals(EmfComponent.BUILTIN)) {
        return;
      }
    }
  }
  if (param.getElement() instanceof Process) {
    if (param.isReadOnly() && param.getCategory() == EComponentCategory.TECHNICAL) {
      return;
    }
    if (isJoblet) {
      if (param != null && !(param.getName().equals(EParameterName.STARTABLE.getName()))) {
        return;
      }
    }
  }
  if (param.getElement() instanceof Node) {
    if (param != null && param.getName().equals(EParameterName.REPOSITORY_ALLOW_AUTO_SWITCH.getName())) {
      return;
    }
    if (param.isReadOnly() && param.getCategory() == EComponentCategory.TECHNICAL) {
      return;
    }
  }
  pType=fileFact.createElementParameterType();
  if (param.getParentParameter() != null) {
    pType.setName(param.getParentParameter().getName() + "String_Node_Str" + param.getName());
  }
 else {
    pType.setName(param.getName());
  }
  pType.setField(param.getFieldType().getName());
  if (param.isContextMode()) {
    pType.setContextMode(param.isContextMode());
  }
  Object value=param.getValue();
  if (param.getFieldType().equals(EParameterFieldType.TABLE) && value != null) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    for (    Map<String,Object> currentLine : tableValues) {
      for (int i=0; i < param.getListItemsDisplayCodeName().length; i++) {
        boolean isHexValue=false;
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(param.getListItemsDisplayCodeName()[i]);
        Object o=currentLine.get(param.getListItemsDisplayCodeName()[i]);
        String strValue="String_Node_Str";
        IElementParameter tmpParam=null;
        Object[] listItemsValue=param.getListItemsValue();
        if (listItemsValue.length > i) {
          tmpParam=(IElementParameter)listItemsValue[i];
        }
        if (o instanceof Integer && tmpParam != null) {
          if (tmpParam.getListItemsValue().length == 0) {
            strValue="String_Node_Str";
          }
 else {
            strValue=(String)tmpParam.getListItemsValue()[(Integer)o];
          }
        }
 else {
          if (o instanceof String) {
            strValue=(String)o;
            isHexValue=isNeedConvertToHex(strValue);
            if (isHexValue) {
              try {
                strValue=Hex.encodeHexString(strValue.getBytes(UTF8));
              }
 catch (              UnsupportedEncodingException e) {
                ExceptionHandler.process(e);
              }
            }
          }
 else {
            if (o instanceof Boolean) {
              strValue=((Boolean)o).toString();
            }
          }
        }
        if (tmpParam != null && tmpParam.getFieldType().equals(EParameterFieldType.PASSWORD)) {
          elementValue.setValue(strValue,true);
        }
 else {
          elementValue.setValue(strValue);
        }
        if (isHexValue) {
          elementValue.setHexValue(true);
        }
        Object object=currentLine.get(param.getListItemsDisplayCodeName()[i] + IEbcdicConstant.REF_TYPE);
        if (object != null) {
          elementValue.setType((String)object);
        }
        pType.getElementValue().add(elementValue);
      }
    }
  }
 else   if (param.getFieldType().equals(EParameterFieldType.TABLE_BY_ROW) && value != null) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    for (    Map<String,Object> currentLine : tableValues) {
      Iterator it=currentLine.keySet().iterator();
      while (it.hasNext()) {
        String key=(String)it.next();
        if (!(currentLine.get(key) instanceof String)) {
          continue;
        }
        String expression=(String)currentLine.get(key);
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(key);
        elementValue.setValue(expression);
        pType.getElementValue().add(elementValue);
      }
    }
  }
 else   if (param.getFieldType().equals(EParameterFieldType.PASSWORD) && value instanceof String) {
    pType.setRawValue((String)value);
  }
 else {
    if (value == null) {
      pType.setValue("String_Node_Str");
    }
 else {
      if (value instanceof Boolean) {
        pType.setValue(((Boolean)value).toString());
      }
 else {
        if (value instanceof String) {
          pType.setValue((String)value);
        }
      }
    }
  }
  pType.setShow(param.isShow(paramList));
  listParamType.add(pType);
}