Program: 57616
Project: 57616
Buggy source:
/** 
 * <p> Creates a column for each DataContainer supplied </p> <p> As StratomeX can only map between data sets that share a mapping between records, the imprinting of the IDType and IDCategory for the records is done here if there is no data set yet. </p>
 * @param newDataContainers
 * @param brickConfigurer The brick configurer can be specified externally (e.g., pathways, kaplan meier). If null, the {@link NumericalDataConfigurer} will be used.
 */
public void addDataContainers(List<DataContainer> newDataContainers,IBrickConfigurer brickConfigurer){
  if (newDataContainers == null || newDataContainers.size() == 0) {
    Logger.log(new Status(Status.WARNING,this.toString(),"String_Node_Str"));
    return;
  }
  if (recordIDCategory == null) {
    ATableBasedDataDomain dataDomain=newDataContainers.get(0).getDataDomain();
    imprintVisBricks(dataDomain);
  }
  ArrayList<BrickColumn> brickColumns=brickColumnManager.getBrickColumns();
  for (  DataContainer dataContainer : newDataContainers) {
    if (!dataContainer.getDataDomain().getRecordIDCategory().equals(recordIDCategory)) {
      Logger.log(new Status(Status.ERROR,this.toString(),"String_Node_Str" + dataContainer + "String_Node_Str"));
    }
    boolean dimensionGroupExists=false;
    for (    BrickColumn brickColumn : brickColumns) {
      if (brickColumn.getDataContainer().getID() == dataContainer.getID()) {
        dimensionGroupExists=true;
        break;
      }
    }
    if (!dimensionGroupExists) {
      BrickColumn dimensionGroup=(BrickColumn)GeneralManager.get().getViewManager().createGLView(BrickColumn.class,getParentGLCanvas(),parentComposite,new ViewFrustum(CameraProjectionMode.ORTHOGRAPHIC,0,1,0,1,-1,1));
      if (brickConfigurer == null) {
        if (dataContainer.getNrDimensions() == 1) {
          brickConfigurer=new CategoricalDataConfigurer(dataContainer);
        }
 else {
          brickConfigurer=new NumericalDataConfigurer(dataContainer);
        }
      }
      dimensionGroup.setDetailLevel(this.getDetailLevel());
      dimensionGroup.setBrickConfigurer(brickConfigurer);
      dimensionGroup.setDataDomain(dataContainer.getDataDomain());
      dimensionGroup.setDataContainer(dataContainer);
      dimensionGroup.setRemoteRenderingGLView(this);
      dimensionGroup.setStratomex(this);
      dimensionGroup.initialize();
      brickColumns.add(dimensionGroup);
      dataContainers.add(dataContainer);
      uninitializedBrickColumns.add(dimensionGroup);
      brickColumnManager.setRightGroupStartIndex(brickColumnManager.getRightGroupStartIndex() + 1);
    }
  }
  DataContainersChangedEvent event=new DataContainersChangedEvent(this);
  event.setSender(this);
  GeneralManager.get().getEventPublisher().triggerEvent(event);
}

Fixed version (ground truth):
/** 
 * <p> Creates a column for each DataContainer supplied </p> <p> As StratomeX can only map between data sets that share a mapping between records, the imprinting of the IDType and IDCategory for the records is done here if there is no data set yet. </p>
 * @param newDataContainers
 * @param brickConfigurer The brick configurer can be specified externally (e.g., pathways, kaplan meier). If null, the {@link NumericalDataConfigurer} will be used.
 */
public void addDataContainers(List<DataContainer> newDataContainers,IBrickConfigurer brickConfigurer){
  if (newDataContainers == null || newDataContainers.size() == 0) {
    Logger.log(new Status(Status.WARNING,this.toString(),"String_Node_Str"));
    return;
  }
  if (recordIDCategory == null) {
    ATableBasedDataDomain dataDomain=newDataContainers.get(0).getDataDomain();
    imprintVisBricks(dataDomain);
  }
  ArrayList<BrickColumn> brickColumns=brickColumnManager.getBrickColumns();
  for (  DataContainer dataContainer : newDataContainers) {
    if (!dataContainer.getDataDomain().getRecordIDCategory().equals(recordIDCategory)) {
      Logger.log(new Status(Status.ERROR,this.toString(),"String_Node_Str" + dataContainer + "String_Node_Str"));
    }
    boolean dimensionGroupExists=false;
    for (    BrickColumn brickColumn : brickColumns) {
      if (brickColumn.getDataContainer().getID() == dataContainer.getID()) {
        dimensionGroupExists=true;
        break;
      }
    }
    if (!dimensionGroupExists) {
      BrickColumn brickColumn=(BrickColumn)GeneralManager.get().getViewManager().createGLView(BrickColumn.class,getParentGLCanvas(),parentComposite,new ViewFrustum(CameraProjectionMode.ORTHOGRAPHIC,0,1,0,1,-1,1));
      if (brickConfigurer == null) {
        if (dataContainer.getNrDimensions() == 1) {
          brickConfigurer=new CategoricalDataConfigurer(dataContainer);
        }
 else {
          brickConfigurer=new NumericalDataConfigurer(dataContainer);
        }
      }
      brickColumn.setDetailLevel(this.getDetailLevel());
      brickColumn.setBrickConfigurer(brickConfigurer);
      brickColumn.setDataDomain(dataContainer.getDataDomain());
      brickColumn.setDataContainer(dataContainer);
      brickColumn.setRemoteRenderingGLView(this);
      brickColumn.setStratomex(this);
      brickColumn.initialize();
      brickColumns.add(brickColumn);
      dataContainers.add(dataContainer);
      uninitializedBrickColumns.add(brickColumn);
      brickColumnManager.setRightGroupStartIndex(brickColumnManager.getRightGroupStartIndex() + 1);
    }
  }
  DataContainersChangedEvent event=new DataContainersChangedEvent(this);
  event.setSender(this);
  GeneralManager.get().getEventPublisher().triggerEvent(event);
}