Program: 125828
Project: 125828
Buggy source:
public static void initilializeSchemaFromElementParameters(IMetadataTable metadataTable,List<IElementParameter> elementParameters){
  IElementParameter mappingParameter=getMappingParameter(elementParameters);
  String uniqueName=null;
  for (int i=0; i < elementParameters.size(); i++) {
    IElementParameter param=elementParameters.get(i);
    if ((param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE)) && param.getContext().equals(metadataTable.getAttachedConnector())) {
      if (param.getValue() instanceof IMetadataTable) {
        param.setValueToDefault(elementParameters);
        IMetadataTable table=(IMetadataTable)param.getValue();
        String metadataTableName=metadataTable.getTableName();
        if (mappingParameter != null) {
          if (mappingParameter.getValue() != null && (!mappingParameter.getValue().equals("String_Node_Str"))) {
            table.setDbms((String)mappingParameter.getValue());
          }
        }
        metadataTable.setReadOnly(table.isReadOnly());
        metadataTable.setReadOnlyColumnPosition(table.getReadOnlyColumnPosition());
        for (int k=0; k < table.getListColumns().size(); k++) {
          IMetadataColumn newColumn=table.getListColumns().get(k);
          IElement element=param.getElement();
          IMetadataColumn oldColumn=metadataTable.getColumn(newColumn.getLabel());
          if (element instanceof INode && oldColumn == null) {
            INode node=(INode)element;
            if (node.getComponent().getName().equals("String_Node_Str")) {
              int lastIndexOf=node.getLabel().lastIndexOf("String_Node_Str");
              oldColumn=metadataTable.getColumn(newColumn.getLabel() + node.getLabel().substring(lastIndexOf));
            }
          }
          boolean update=true;
          if (metadataTableName != null && !metadataTableName.equals(table.getTableName())) {
            update=newColumn.isCustom();
          }
          if (oldColumn != null && update) {
            oldColumn.setReadOnly(newColumn.isReadOnly());
            oldColumn.setCustom(newColumn.isCustom());
            oldColumn.setCustomId(newColumn.getCustomId());
            if (newColumn.isReadOnly()) {
              oldColumn.setKey(newColumn.isKey());
              oldColumn.setNullable(newColumn.isNullable());
              oldColumn.setLength(newColumn.getLength());
              oldColumn.setPrecision(newColumn.getPrecision());
              oldColumn.setPattern(newColumn.getPattern());
              oldColumn.setType(newColumn.getType());
              oldColumn.setTalendType(newColumn.getTalendType());
              oldColumn.setComment(newColumn.getComment());
            }
          }
        }
      }
 else       if (param.getValue() instanceof Schema) {
        if (!param.getDefaultValues().isEmpty()) {
          Schema schema=(Schema)param.getDefaultValues().get(0).getDefaultValue();
          org.talend.core.model.metadata.builder.connection.MetadataTable defaultEmfTable=MetadataToolAvroHelper.convertFromAvro(schema);
          IMetadataTable defaultTable=MetadataToolHelper.convert(defaultEmfTable);
          for (          IMetadataColumn currentColumn : metadataTable.getListColumns()) {
            IMetadataColumn defaultColumn=defaultTable.getColumn(currentColumn.getLabel());
            if (defaultColumn != null) {
              currentColumn.setCustom(defaultColumn.isCustom());
              currentColumn.setReadOnly(defaultColumn.isReadOnly());
            }
          }
          metadataTable.setReadOnly(defaultTable.isReadOnly());
        }
      }
    }
  }
  metadataTable.sortCustomColumns();
}

Fixed version (ground truth):
public static void initilializeSchemaFromElementParameters(IMetadataTable metadataTable,List<IElementParameter> elementParameters){
  IElementParameter mappingParameter=getMappingParameter(elementParameters);
  String uniqueName=null;
  for (int i=0; i < elementParameters.size(); i++) {
    IElementParameter param=elementParameters.get(i);
    if ((param.getFieldType().equals(EParameterFieldType.SCHEMA_TYPE) || param.getFieldType().equals(EParameterFieldType.SCHEMA_REFERENCE)) && param.getContext().equals(metadataTable.getAttachedConnector())) {
      if (param.getValue() instanceof IMetadataTable) {
        param.setValueToDefault(elementParameters);
        IMetadataTable table=(IMetadataTable)param.getValue();
        String metadataTableName=metadataTable.getTableName();
        if (mappingParameter != null) {
          if (mappingParameter.getValue() != null && (!mappingParameter.getValue().equals("String_Node_Str"))) {
            table.setDbms((String)mappingParameter.getValue());
          }
        }
        metadataTable.setReadOnly(table.isReadOnly());
        metadataTable.setReadOnlyColumnPosition(table.getReadOnlyColumnPosition());
        for (int k=0; k < table.getListColumns().size(); k++) {
          IMetadataColumn newColumn=table.getListColumns().get(k);
          IElement element=param.getElement();
          IMetadataColumn oldColumn=metadataTable.getColumn(newColumn.getLabel());
          if (element instanceof INode && oldColumn == null) {
            INode node=(INode)element;
            if (node.getComponent().getName().equals("String_Node_Str")) {
              int lastIndexOf=node.getLabel().lastIndexOf("String_Node_Str");
              oldColumn=metadataTable.getColumn(newColumn.getLabel() + node.getLabel().substring(lastIndexOf));
            }
          }
          boolean update=true;
          if (metadataTableName != null && !metadataTableName.equals(table.getTableName())) {
            update=newColumn.isCustom();
          }
          if (oldColumn != null && update) {
            oldColumn.setReadOnly(newColumn.isReadOnly());
            oldColumn.setCustom(newColumn.isCustom());
            oldColumn.setCustomId(newColumn.getCustomId());
            if (newColumn.isReadOnly()) {
              oldColumn.setKey(newColumn.isKey());
              oldColumn.setNullable(newColumn.isNullable());
              oldColumn.setLength(newColumn.getLength());
              oldColumn.setPrecision(newColumn.getPrecision());
              oldColumn.setPattern(newColumn.getPattern());
              oldColumn.setType(newColumn.getType());
              oldColumn.setTalendType(newColumn.getTalendType());
              oldColumn.setComment(newColumn.getComment());
            }
          }
        }
      }
 else       if (param.getFieldType() == EParameterFieldType.SCHEMA_REFERENCE) {
        if (!param.getDefaultValues().isEmpty()) {
          Schema schema=(Schema)param.getDefaultValues().get(0).getDefaultValue();
          org.talend.core.model.metadata.builder.connection.MetadataTable defaultEmfTable=MetadataToolAvroHelper.convertFromAvro(schema);
          IMetadataTable defaultTable=MetadataToolHelper.convert(defaultEmfTable);
          for (          IMetadataColumn currentColumn : metadataTable.getListColumns()) {
            IMetadataColumn defaultColumn=defaultTable.getColumn(currentColumn.getLabel());
            if (defaultColumn != null) {
              currentColumn.setCustom(defaultColumn.isCustom());
              currentColumn.setReadOnly(defaultColumn.isReadOnly());
            }
          }
          metadataTable.setReadOnly(defaultTable.isReadOnly());
        }
      }
    }
  }
  metadataTable.sortCustomColumns();
}