Program: 124291
Project: 124291
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.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || 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 (isJoblet) {
      if (param != null && !(param.getName().equals(EParameterName.STARTABLE.getName()))) {
        return;
      }
    }
  }
  if (param.getElement() instanceof Node) {
    Node curNode=(Node)param.getElement();
    IComponent component=ComponentsFactoryProvider.getInstance().get(curNode.getComponent().getName());
    if (param != null && param.getName().equals(EParameterName.REPOSITORY_ALLOW_AUTO_SWITCH.getName())) {
      return;
    }
    if (component instanceof EmfComponent) {
      DataNode tempNode=new DataNode();
      tempNode.setElementParameters(new ArrayList<IElementParameter>());
      ((EmfComponent)component).addMainParameters((List<ElementParameter>)tempNode.getElementParameters(),tempNode);
      ((EmfComponent)component).addViewParameters((List<ElementParameter>)tempNode.getElementParameters(),tempNode);
      IElementParameter tmpParam1=tempNode.getElementParameter(param.getName());
      if (tmpParam1 != null && tmpParam1.getValue() != null && tmpParam1.getValue().equals(param.getValue())) {
        return;
      }
      if (tmpParam1 != null && StringUtils.equals(tmpParam1.getValue() == null ? null : tmpParam1.getValue().toString(),param.getValue() == null ? null : param.getValue().toString())) {
        return;
      }
    }
  }
  if (param.getElement() instanceof SubjobContainer) {
    SubjobContainer subjob=new SubjobContainer(this);
    IElementParameter subjobParam=subjob.getElementParameter(param.getName());
    if (subjobParam != null && subjobParam.getValue() != null && subjobParam.getValue().equals(param.getValue())) {
      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++) {
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(param.getListItemsDisplayCodeName()[i]);
        Object o=currentLine.get(param.getListItemsDisplayCodeName()[i]);
        String strValue="String_Node_Str";
        if (o instanceof Integer) {
          IElementParameter tmpParam=(IElementParameter)param.getListItemsValue()[i];
          if (tmpParam.getListItemsValue().length == 0) {
            strValue="String_Node_Str";
          }
 else {
            strValue=(String)tmpParam.getListItemsValue()[(Integer)o];
          }
        }
 else {
          if (o instanceof String) {
            strValue=(String)o;
          }
 else {
            if (o instanceof Boolean) {
              strValue=((Boolean)o).toString();
            }
          }
        }
        elementValue.setValue(strValue);
        Object object=currentLine.get(param.getListItemsDisplayCodeName()[i] + IEbcdicConstant.REF_TYPE);
        if (object != null) {
          elementValue.setType((String)object);
        }
        pType.getElementValue().add(elementValue);
      }
    }
  }
 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);
        }
      }
    }
  }
  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.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || 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;
      }
    }
    for (    IElementParameter currentParam : JobSettingsManager.getJobSettingsParameters(this)) {
      if (currentParam.getName().equals(param.getName())) {
        if (currentParam.getValue() != null && currentParam.getValue().equals(param.getValue())) {
          return;
        }
      }
    }
  }
  if (param.getElement() instanceof Node) {
    Node curNode=(Node)param.getElement();
    IComponent component=ComponentsFactoryProvider.getInstance().get(curNode.getComponent().getName());
    if (param != null && param.getName().equals(EParameterName.REPOSITORY_ALLOW_AUTO_SWITCH.getName())) {
      return;
    }
    if (component instanceof EmfComponent) {
      DataNode tempNode=new DataNode();
      tempNode.setElementParameters(new ArrayList<IElementParameter>());
      ((EmfComponent)component).addMainParameters((List<ElementParameter>)tempNode.getElementParameters(),tempNode);
      ((EmfComponent)component).addViewParameters((List<ElementParameter>)tempNode.getElementParameters(),tempNode);
      IElementParameter tmpParam1=tempNode.getElementParameter(param.getName());
      if (tmpParam1 != null && tmpParam1.getValue() != null && tmpParam1.getValue().equals(param.getValue())) {
        return;
      }
      if (tmpParam1 != null && StringUtils.equals(tmpParam1.getValue() == null ? null : tmpParam1.getValue().toString(),param.getValue() == null ? null : param.getValue().toString())) {
        return;
      }
    }
  }
  if (param.getElement() instanceof SubjobContainer) {
    SubjobContainer subjob=new SubjobContainer(this);
    IElementParameter subjobParam=subjob.getElementParameter(param.getName());
    if (subjobParam != null && subjobParam.getValue() != null && subjobParam.getValue().equals(param.getValue())) {
      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++) {
        ElementValueType elementValue=fileFact.createElementValueType();
        elementValue.setElementRef(param.getListItemsDisplayCodeName()[i]);
        Object o=currentLine.get(param.getListItemsDisplayCodeName()[i]);
        String strValue="String_Node_Str";
        if (o instanceof Integer) {
          IElementParameter tmpParam=(IElementParameter)param.getListItemsValue()[i];
          if (tmpParam.getListItemsValue().length == 0) {
            strValue="String_Node_Str";
          }
 else {
            strValue=(String)tmpParam.getListItemsValue()[(Integer)o];
          }
        }
 else {
          if (o instanceof String) {
            strValue=(String)o;
          }
 else {
            if (o instanceof Boolean) {
              strValue=((Boolean)o).toString();
            }
          }
        }
        elementValue.setValue(strValue);
        Object object=currentLine.get(param.getListItemsDisplayCodeName()[i] + IEbcdicConstant.REF_TYPE);
        if (object != null) {
          elementValue.setType((String)object);
        }
        pType.getElementValue().add(elementValue);
      }
    }
  }
 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);
        }
      }
    }
  }
  listParamType.add(pType);
}