Program: 119580
Project: 119580
Buggy source:
@Override public void widgetSelected(SelectionEvent e){
  MetadataDialog metaDialog=null;
  List outPutConnections=outputNode.getOutgoingConnections();
  if (inputMetaCopy != null && inputNode != null && outPutConnections != null && !outPutConnections.isEmpty()) {
    metaDialog=new MetadataDialog(uiParent.getShell(),inputMetaCopy,inputNode,outputMetaCopy,outputNode,null);
  }
 else {
    metaDialog=new MetadataDialog(uiParent.getShell(),outputMetaCopy,outputNode,null);
  }
  int openCode=metaDialog.open();
  if (openCode == MetadataDialog.OK) {
    inputMetaCopy=metaDialog.getInputMetaData();
    outputMetaCopy=metaDialog.getOutputMetaData();
    if (inputMetadata != null) {
      if (inputMetaCopy != null && !inputMetaCopy.sameMetadataAs(temInputMetadata,IMetadataColumn.OPTIONS_NONE)) {
        List<IMetadataColumn> inNewColumn=inputMetaCopy.getListColumns();
        inPutcolumnList.clear();
        inPutcolumnList.addAll(inNewColumn);
        temInputMetadata=inputMetaCopy.clone();
        columnInPutTableView.getTableViewerCreator().getTableViewer().refresh();
      }
    }
    if (!outputMetaCopy.sameMetadataAs(temOutputMetadata,IMetadataColumn.OPTIONS_NONE)) {
      List<IMetadataColumn> outNewColumn=outputMetaCopy.getListColumns();
      if (outNewColumn.isEmpty()) {
        outPutcolumnList.clear();
      }
 else {
        EList schemaMetadataColumn=null;
        if (connection != null) {
          Set<org.talend.core.model.metadata.builder.connection.MetadataTable> tables=ConnectionHelper.getTables(connection);
          Iterator it=tables.iterator();
          while (it.hasNext()) {
            org.talend.core.model.metadata.builder.connection.MetadataTable metadatatable=(org.talend.core.model.metadata.builder.connection.MetadataTable)it.next();
            if (metadatatable.getLabel().equals("String_Node_Str")) {
              schemaMetadataColumn=metadatatable.getColumns();
            }
          }
        }
        for (int i=0; i < outPutcolumnList.size(); i++) {
          OutPutMappingData outcol=outPutcolumnList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (!outcol.getOutputColumnValue().equals(oldCol.getLabel())) {
            if (connection != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(outcol.getOutputColumnValue())) {
                  mcolumn.setLabel(oldCol.getLabel());
                  mcolumn.setOriginalField(oldCol.getLabel());
                  mcolumn.setTalendType(oldCol.getTalendType());
                }
              }
            }
            outcol.setOutputColumnValue(oldCol.getLabel());
          }
        }
        for (int i=0; i < outNewColumn.size(); i++) {
          IMetadataColumn newCol=outNewColumn.get(i);
          if (isAdd(newCol,outPutcolumnList)) {
            forOutColumnList.add(newCol);
            OutPutMappingData outData=new OutPutMappingData();
            outData.setOutputColumnValue(newCol.getLabel());
            outData.setMetadataColumn(newCol);
            outPutcolumnList.add(outData);
            if (connection != null) {
              MetadataColumn metadataColumn=ConnectionFactory.eINSTANCE.createMetadataColumn();
              metadataColumn.setLabel(newCol.getLabel());
              metadataColumn.setOriginalField(newCol.getLabel());
              metadataColumn.setTalendType(newCol.getTalendType());
              schemaMetadataColumn.add(metadataColumn);
            }
          }
        }
        for (int i=0; i < outPutcolumnList.size(); i++) {
          OutPutMappingData outcol=outPutcolumnList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (isDelete(oldCol,outNewColumn)) {
            if (schemaMetadataColumn != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(oldCol.getLabel())) {
                  schemaMetadataColumn.remove(mcolumn);
                  j--;
                }
              }
            }
            outPutcolumnList.remove(outcol);
            i--;
          }
        }
        for (int i=0; i < outputColumnCompareList.size(); i++) {
          OutPutMappingData outcol=outputColumnCompareList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (isDelete(oldCol,outNewColumn)) {
            if (schemaMetadataColumn != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(oldCol.getLabel())) {
                  schemaMetadataColumn.remove(mcolumn);
                  j--;
                }
              }
            }
          }
        }
      }
      temOutputMetadata=outputMetaCopy.clone();
      expressoutPutTableView.getTableViewerCreator().getTableViewer().refresh();
    }
  }
 else   if (openCode == MetadataDialog.CANCEL) {
    outputMetaCopy=temOutputMetadata.clone();
    return;
  }
}

Fixed version (ground truth):
@Override public void widgetSelected(SelectionEvent e){
  MetadataDialog metaDialog=null;
  List outPutConnections=outputNode.getOutgoingConnections();
  if (inputMetaCopy != null && inputNode != null && outPutConnections != null && !outPutConnections.isEmpty()) {
    metaDialog=new MetadataDialog(uiParent.getShell(),inputMetaCopy,inputNode,outputMetaCopy,outputNode,null);
  }
 else {
    metaDialog=new MetadataDialog(uiParent.getShell(),outputMetaCopy,outputNode,null);
  }
  int openCode=metaDialog.open();
  if (openCode == MetadataDialog.OK) {
    inputMetaCopy=metaDialog.getInputMetaData();
    outputMetaCopy=metaDialog.getOutputMetaData();
    if (inputMetadata != null) {
      if (inputMetaCopy != null && !inputMetaCopy.sameMetadataAs(temInputMetadata,IMetadataColumn.OPTIONS_NONE)) {
        List<IMetadataColumn> inNewColumn=inputMetaCopy.getListColumns();
        inPutcolumnList.clear();
        inPutcolumnList.addAll(inNewColumn);
        temInputMetadata=inputMetaCopy.clone();
        columnInPutTableView.getTableViewerCreator().getTableViewer().refresh();
      }
    }
    if (!outputMetaCopy.sameMetadataAs(temOutputMetadata,IMetadataColumn.OPTIONS_NONE)) {
      List<IMetadataColumn> outNewColumn=outputMetaCopy.getListColumns();
      if (outNewColumn.isEmpty()) {
        outPutcolumnList.clear();
      }
 else {
        EList schemaMetadataColumn=null;
        if (connection != null) {
          Set<org.talend.core.model.metadata.builder.connection.MetadataTable> tables=ConnectionHelper.getTables(connection);
          Iterator it=tables.iterator();
          while (it.hasNext()) {
            org.talend.core.model.metadata.builder.connection.MetadataTable metadatatable=(org.talend.core.model.metadata.builder.connection.MetadataTable)it.next();
            if (metadatatable.getLabel().equals("String_Node_Str")) {
              schemaMetadataColumn=metadatatable.getColumns();
            }
          }
        }
        for (int i=0; i < outPutcolumnList.size(); i++) {
          OutPutMappingData outcol=outPutcolumnList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (!outcol.getOutputColumnValue().equals(oldCol.getLabel())) {
            if (connection != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(outcol.getOutputColumnValue())) {
                  mcolumn.setLabel(oldCol.getLabel());
                  mcolumn.setOriginalField(oldCol.getLabel());
                  mcolumn.setTalendType(oldCol.getTalendType());
                }
              }
            }
            outcol.setOutputColumnValue(oldCol.getLabel());
          }
        }
        for (int i=0; i < outNewColumn.size(); i++) {
          IMetadataColumn newCol=outNewColumn.get(i);
          if (isAdd(newCol,outPutcolumnList)) {
            forOutColumnList.add(newCol);
            OutPutMappingData outData=new OutPutMappingData();
            outData.setOutputColumnValue(newCol.getLabel());
            outData.setMetadataColumn(newCol);
            outPutcolumnList.add(outData);
            if (connection != null) {
              MetadataColumn metadataColumn=ConnectionFactory.eINSTANCE.createMetadataColumn();
              metadataColumn.setLabel(newCol.getLabel());
              metadataColumn.setOriginalField(newCol.getLabel());
              metadataColumn.setTalendType(newCol.getTalendType());
              schemaMetadataColumn.add(metadataColumn);
            }
          }
        }
        for (int i=0; i < outPutcolumnList.size(); i++) {
          OutPutMappingData outcol=outPutcolumnList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (isDelete(oldCol,outNewColumn)) {
            if (schemaMetadataColumn != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(oldCol.getLabel())) {
                  schemaMetadataColumn.remove(mcolumn);
                  j--;
                }
              }
            }
            outPutcolumnList.remove(outcol);
            i--;
          }
        }
        for (int i=0; i < outputColumnCompareList.size(); i++) {
          OutPutMappingData outcol=outputColumnCompareList.get(i);
          IMetadataColumn oldCol=outcol.getMetadataColumn();
          if (isDelete(oldCol,outNewColumn)) {
            if (schemaMetadataColumn != null) {
              for (int j=0; j < schemaMetadataColumn.size(); j++) {
                MetadataColumn mcolumn=(MetadataColumn)schemaMetadataColumn.get(j);
                if (mcolumn.getLabel().equals(oldCol.getLabel())) {
                  schemaMetadataColumn.remove(mcolumn);
                  j--;
                }
              }
            }
          }
        }
      }
      temOutputMetadata=outputMetaCopy.clone();
      expressoutPutTableView.getTableViewerCreator().getTableViewer().refresh();
    }
    synchronizeOutputLinks(tabTotabLinkForout,outputMetaCopy.getListColumns());
  }
 else   if (openCode == MetadataDialog.CANCEL) {
    outputMetaCopy=temOutputMetadata.clone();
    return;
  }
}