Program: 120353
Project: 120353
Buggy source:
private void loadConnections(ProcessType process,Hashtable<String,Node> nodesHashtable){
  EList listParamType;
  EList connecList;
  ConnectionType cType;
  connecList=process.getConnection();
  Connection connec;
  Node source, target;
  List<String> connectionsProblems=new ArrayList<String>();
  Hashtable<ConnectionType,Connection> connectionsHashtable=new Hashtable<ConnectionType,Connection>();
  List<String> connectionUniqueNames=new ArrayList<String>();
  for (int i=0; i < connecList.size(); i++) {
    cType=(ConnectionType)connecList.get(i);
    source=nodesHashtable.get(cType.getSource());
    target=nodesHashtable.get(cType.getTarget());
    if (source == null || target == null) {
      continue;
    }
    Integer lineStyleId=new Integer(cType.getLineStyle());
    String connectorName=cType.getConnectorName();
    boolean connectionTypeFound=false;
    if (connectorName != null) {
      if (source.getConnectorFromName(connectorName) != null && (source.getConnectorFromName(connectorName).getConnectionProperty(EConnectionType.getTypeFromId(lineStyleId)) != null)) {
        connectionTypeFound=true;
      }
    }
    String connectionLabel=cType.getLabel();
    String metaname=cType.getMetaname();
    if ((source.getComponent().getName().equals("String_Node_Str")) && (source.getMetadataTable(metaname) == null)) {
      metaname=cType.getLabel();
      if (source.getMetadataTable(metaname) == null) {
        if (source.getMetadataList().size() > 0) {
          metaname=source.getMetadataList().get(0).getTableName();
        }
        connectionsProblems.add(connectionLabel);
      }
    }
    boolean monitorConnection=getConnectionMonitorProperty(cType);
    if (connectionTypeFound) {
      connec=new Connection(source,target,EConnectionType.getTypeFromId(lineStyleId),connectorName,metaname,cType.getLabel(),cType.getMetaname(),monitorConnection);
    }
 else {
      if (PluginChecker.isJobLetPluginLoaded()) {
        IJobletProviderService service=(IJobletProviderService)GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
        if (service != null && service.isJobletComponent(source)) {
          continue;
        }
      }
      EConnectionType type=EConnectionType.getTypeFromId(lineStyleId);
      connec=new Connection(source,target,type,source.getConnectorFromType(type).getName(),metaname,cType.getLabel(),cType.getMetaname(),monitorConnection);
    }
    connectionsHashtable.put(cType,connec);
    listParamType=cType.getElementParameter();
    loadElementParameters(connec,listParamType);
    String uniqueName=connec.getUniqueName();
    if (!connectionUniqueNames.contains(uniqueName) && checkValidConnectionName(uniqueName,false)) {
      try {
        source.getProcess().addUniqueConnectionName(uniqueName);
      }
 catch (      Exception e) {
      }
    }
 else {
      uniqueName=source.getProcess().generateUniqueConnectionName(uniqueName);
      if (connec.getLineStyle().equals(EConnectionType.RUN_IF) || connec.getLineStyle().equals(EConnectionType.ITERATE) || connec.getLineStyle().equals(EConnectionType.ON_COMPONENT_ERROR)|| connec.getLineStyle().equals(EConnectionType.ON_COMPONENT_OK)|| connec.getLineStyle().equals(EConnectionType.ON_SUBJOB_ERROR)|| connec.getLineStyle().equals(EConnectionType.ON_SUBJOB_OK)) {
        connec.setUniqueName(uniqueName);
      }
      source.getProcess().addUniqueConnectionName(uniqueName);
    }
    connectionUniqueNames.add(uniqueName);
    Point offset=new Point(cType.getOffsetLabelX(),cType.getOffsetLabelY());
    INodeConnector nodeConnectorSource=connec.getSourceNodeConnector();
    nodeConnectorSource.setCurLinkNbOutput(nodeConnectorSource.getCurLinkNbOutput() + 1);
    INodeConnector nodeConnectorTarget=connec.getTargetNodeConnector();
    nodeConnectorTarget.setCurLinkNbInput(nodeConnectorTarget.getCurLinkNbInput() + 1);
    connec.getConnectionLabel().setOffset(offset);
  }
  for (  INode node : nodes) {
    if (node.getComponent().useMerge()) {
      for (int i=0; i < connecList.size(); i++) {
        cType=(ConnectionType)connecList.get(i);
        if (cType.getTarget().equals(node.getUniqueName())) {
          if (cType.isSetMergeOrder()) {
            Connection connection=connectionsHashtable.get(cType);
            connection.setInputId(cType.getMergeOrder());
            connection.updateName();
          }
        }
      }
    }
  }
  if (connectionsProblems.size() > 0) {
    String message=this.getLabel() + "String_Node_Str" + Messages.getString("String_Node_Str");
    for (int i=0; i < connectionsProblems.size(); i++) {
      message+=connectionsProblems.get(i);
      if (i < (connectionsProblems.size() - 1)) {
        message+="String_Node_Str";
      }
    }
    final String message2=message;
    if (!CommonsPlugin.isHeadless()) {
      final Display display=PlatformUI.getWorkbench().getDisplay();
      display.syncExec(new Runnable(){
        @Override public void run(){
          MessageBox mb=new MessageBox(new Shell(display),SWT.ICON_ERROR);
          mb.setText(getLabel() + "String_Node_Str" + Messages.getString("String_Node_Str"));
          mb.setMessage(message2);
          mb.open();
        }
      }
);
    }
 else {
      IStatus status=new Status(IStatus.WARNING,DesignerPlugin.ID,message);
      DesignerPlugin.getDefault().getLog().log(status);
    }
  }
}

Fixed version (ground truth):
private void loadConnections(ProcessType process,Hashtable<String,Node> nodesHashtable){
  EList listParamType;
  EList connecList;
  ConnectionType cType;
  connecList=process.getConnection();
  Connection connec;
  Node source, target;
  List<String> connectionsProblems=new ArrayList<String>();
  Hashtable<ConnectionType,Connection> connectionsHashtable=new Hashtable<ConnectionType,Connection>();
  List<String> connectionUniqueNames=new ArrayList<String>();
  for (int i=0; i < connecList.size(); i++) {
    cType=(ConnectionType)connecList.get(i);
    source=nodesHashtable.get(cType.getSource());
    target=nodesHashtable.get(cType.getTarget());
    if (source == null || target == null) {
      continue;
    }
    Integer lineStyleId=new Integer(cType.getLineStyle());
    String connectorName=cType.getConnectorName();
    boolean connectionTypeFound=false;
    if (connectorName != null) {
      if (source.getConnectorFromName(connectorName) != null && (source.getConnectorFromName(connectorName).getConnectionProperty(EConnectionType.getTypeFromId(lineStyleId)) != null)) {
        connectionTypeFound=true;
      }
    }
    String connectionLabel=cType.getLabel();
    String metaname=cType.getMetaname();
    if ((source.getComponent().getName().equals("String_Node_Str")) && (source.getMetadataTable(metaname) == null)) {
      metaname=cType.getLabel();
      if (source.getMetadataTable(metaname) == null) {
        if (source.getMetadataList().size() > 0) {
          metaname=source.getMetadataList().get(0).getTableName();
        }
        connectionsProblems.add(connectionLabel);
      }
    }
    boolean monitorConnection=getConnectionMonitorProperty(cType);
    if (connectionTypeFound) {
      connec=new Connection(source,target,EConnectionType.getTypeFromId(lineStyleId),connectorName,metaname,cType.getLabel(),cType.getMetaname(),monitorConnection);
    }
 else {
      if (PluginChecker.isJobLetPluginLoaded()) {
        IJobletProviderService service=(IJobletProviderService)GlobalServiceRegister.getDefault().getService(IJobletProviderService.class);
        if (service != null && service.isJobletComponent(source)) {
          continue;
        }
      }
      EConnectionType type=EConnectionType.getTypeFromId(lineStyleId);
      connec=new Connection(source,target,type,source.getConnectorFromType(type).getName(),metaname,cType.getLabel(),cType.getMetaname(),monitorConnection);
    }
    connectionsHashtable.put(cType,connec);
    listParamType=cType.getElementParameter();
    loadElementParameters(connec,listParamType);
    String uniqueName=connec.getUniqueName();
    if (connec.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME)) {
      if (!connec.getUniqueName().equals(connec.getName())) {
        connec.setName(connec.getUniqueName());
      }
    }
    if (!connectionUniqueNames.contains(uniqueName) && checkValidConnectionName(uniqueName,false)) {
      try {
        source.getProcess().addUniqueConnectionName(uniqueName);
      }
 catch (      Exception e) {
      }
    }
 else {
      uniqueName=source.getProcess().generateUniqueConnectionName(uniqueName);
      if (connec.getLineStyle().hasConnectionCategory(IConnectionCategory.UNIQUE_NAME)) {
        ChangeConnTextCommand cctc=new ChangeConnTextCommand(connec,uniqueName);
        cctc.execute();
      }
 else {
        if (connec.getLineStyle().equals(EConnectionType.RUN_IF) || connec.getLineStyle().equals(EConnectionType.ITERATE) || connec.getLineStyle().equals(EConnectionType.ON_COMPONENT_ERROR)|| connec.getLineStyle().equals(EConnectionType.ON_COMPONENT_OK)|| connec.getLineStyle().equals(EConnectionType.ON_SUBJOB_ERROR)|| connec.getLineStyle().equals(EConnectionType.ON_SUBJOB_OK)) {
          connec.setUniqueName(uniqueName);
        }
        source.getProcess().addUniqueConnectionName(uniqueName);
      }
    }
    connectionUniqueNames.add(uniqueName);
    Point offset=new Point(cType.getOffsetLabelX(),cType.getOffsetLabelY());
    INodeConnector nodeConnectorSource=connec.getSourceNodeConnector();
    nodeConnectorSource.setCurLinkNbOutput(nodeConnectorSource.getCurLinkNbOutput() + 1);
    INodeConnector nodeConnectorTarget=connec.getTargetNodeConnector();
    nodeConnectorTarget.setCurLinkNbInput(nodeConnectorTarget.getCurLinkNbInput() + 1);
    connec.getConnectionLabel().setOffset(offset);
  }
  for (  INode node : nodes) {
    if (node.getComponent().useMerge()) {
      for (int i=0; i < connecList.size(); i++) {
        cType=(ConnectionType)connecList.get(i);
        if (cType.getTarget().equals(node.getUniqueName())) {
          if (cType.isSetMergeOrder()) {
            Connection connection=connectionsHashtable.get(cType);
            connection.setInputId(cType.getMergeOrder());
            connection.updateName();
          }
        }
      }
    }
  }
  if (connectionsProblems.size() > 0) {
    String message=this.getLabel() + "String_Node_Str" + Messages.getString("String_Node_Str");
    for (int i=0; i < connectionsProblems.size(); i++) {
      message+=connectionsProblems.get(i);
      if (i < (connectionsProblems.size() - 1)) {
        message+="String_Node_Str";
      }
    }
    final String message2=message;
    if (!CommonsPlugin.isHeadless()) {
      final Display display=PlatformUI.getWorkbench().getDisplay();
      display.syncExec(new Runnable(){
        @Override public void run(){
          MessageBox mb=new MessageBox(new Shell(display),SWT.ICON_ERROR);
          mb.setText(getLabel() + "String_Node_Str" + Messages.getString("String_Node_Str"));
          mb.setMessage(message2);
          mb.open();
        }
      }
);
    }
 else {
      IStatus status=new Status(IStatus.WARNING,DesignerPlugin.ID,message);
      DesignerPlugin.getDefault().getLog().log(status);
    }
  }
}