Program: 87617
Project: 87617
Buggy source:
/** 
 * Creates the initial edges between the group vertices
 * @param vertexMap the temporary vertex map
 * @throws GraphConversionException if the initial wiring cannot be created
 */
private void createInitialGroupEdges(final HashMap<AbstractJobVertex,ExecutionVertex> vertexMap) throws GraphConversionException {
  Iterator<Map.Entry<AbstractJobVertex,ExecutionVertex>> it=vertexMap.entrySet().iterator();
  while (it.hasNext()) {
    final Map.Entry<AbstractJobVertex,ExecutionVertex> entry=it.next();
    final AbstractJobVertex sjv=entry.getKey();
    final ExecutionVertex sev=entry.getValue();
    final ExecutionGroupVertex sgv=sev.getGroupVertex();
    if (sjv.getNumberOfForwardConnections() != sgv.getEnvironment().getNumberOfOutputGates()) {
      throw new GraphConversionException("String_Node_Str" + sjv.getName() + "String_Node_Str");
    }
    if (sjv.getNumberOfBackwardConnections() != sgv.getEnvironment().getNumberOfInputGates()) {
      throw new GraphConversionException("String_Node_Str" + sjv.getName() + "String_Node_Str");
    }
    for (int i=0; i < sjv.getNumberOfForwardConnections(); ++i) {
      final boolean isBroadcast=sgv.getEnvironment().getOutputGate(i).isBroadcast();
      final JobEdge edge=sjv.getForwardConnection(i);
      final AbstractJobVertex tjv=edge.getConnectedVertex();
      final ExecutionVertex tev=vertexMap.get(tjv);
      final ExecutionGroupVertex tgv=tev.getGroupVertex();
      final ChannelType channelType=edge.getChannelType();
      final CompressionLevel compressionLevel=edge.getCompressionLevel();
      final DistributionPattern distributionPattern=edge.getDistributionPattern();
      final boolean userDefinedChannelType=(channelType != null);
      final boolean userDefinedCompressionLevel=(compressionLevel != null);
      final ExecutionGroupEdge groupEdge=sgv.wireTo(tgv,edge.getIndexOfInputGate(),i,channelType,userDefinedChannelType,compressionLevel,userDefinedCompressionLevel,distributionPattern,isBroadcast);
      final ExecutionGate outputGate=new ExecutionGate(new GateID(),sev,groupEdge,false);
      sev.insertOutputGate(i,outputGate);
      final ExecutionGate inputGate=new ExecutionGate(new GateID(),tev,groupEdge,true);
      tev.insertInputGate(edge.getIndexOfInputGate(),inputGate);
    }
  }
}

Fixed version (ground truth):
/** 
 * Creates the initial edges between the group vertices
 * @param vertexMap the temporary vertex map
 * @throws GraphConversionException if the initial wiring cannot be created
 */
private void createInitialGroupEdges(final HashMap<AbstractJobVertex,ExecutionVertex> vertexMap) throws GraphConversionException {
  Iterator<Map.Entry<AbstractJobVertex,ExecutionVertex>> it=vertexMap.entrySet().iterator();
  while (it.hasNext()) {
    final Map.Entry<AbstractJobVertex,ExecutionVertex> entry=it.next();
    final AbstractJobVertex sjv=entry.getKey();
    final ExecutionVertex sev=entry.getValue();
    final ExecutionGroupVertex sgv=sev.getGroupVertex();
    if (sjv.getNumberOfForwardConnections() != sgv.getEnvironment().getNumberOfOutputGates()) {
      throw new GraphConversionException("String_Node_Str" + sjv.getName() + "String_Node_Str");
    }
    if (sjv.getNumberOfBackwardConnections() != sgv.getEnvironment().getNumberOfInputGates()) {
      throw new GraphConversionException("String_Node_Str" + sjv.getName() + "String_Node_Str");
    }
    for (int i=0; i < sjv.getNumberOfForwardConnections(); ++i) {
      final boolean isBroadcast=sgv.getEnvironment().getOutputGate(i).isBroadcast();
      final JobEdge edge=sjv.getForwardConnection(i);
      final AbstractJobVertex tjv=edge.getConnectedVertex();
      final ExecutionVertex tev=vertexMap.get(tjv);
      final ExecutionGroupVertex tgv=tev.getGroupVertex();
      ChannelType channelType=edge.getChannelType();
      boolean userDefinedChannelType=true;
      if (channelType == null) {
        userDefinedChannelType=false;
        channelType=ChannelType.NETWORK;
      }
      CompressionLevel compressionLevel=edge.getCompressionLevel();
      boolean userDefinedCompressionLevel=true;
      if (compressionLevel == null) {
        userDefinedCompressionLevel=false;
        compressionLevel=CompressionLevel.NO_COMPRESSION;
      }
      final DistributionPattern distributionPattern=edge.getDistributionPattern();
      final ExecutionGroupEdge groupEdge=sgv.wireTo(tgv,edge.getIndexOfInputGate(),i,channelType,userDefinedChannelType,compressionLevel,userDefinedCompressionLevel,distributionPattern,isBroadcast);
      final ExecutionGate outputGate=new ExecutionGate(new GateID(),sev,groupEdge,false);
      sev.insertOutputGate(i,outputGate);
      final ExecutionGate inputGate=new ExecutionGate(new GateID(),tev,groupEdge,true);
      tev.insertInputGate(edge.getIndexOfInputGate(),inputGate);
    }
  }
}