public CTCols addCleanColIntoCols(CTCols cols, CTCol col) { boolean colOverlaps = false; for (int i = 0; i < cols.sizeOfColArray(); i++) { CTCol ithCol = cols.getColArray(i); long[] range1 = {ithCol.getMin(), ithCol.getMax()}; long[] range2 = {col.getMin(), col.getMax()}; long[] overlappingRange = NumericRanges.getOverlappingRange(range1, range2); int overlappingType = NumericRanges.getOverlappingType(range1, range2); // different behavior required for each of the 4 different // overlapping types if (overlappingType == NumericRanges.OVERLAPS_1_MINOR) { ithCol.setMax(overlappingRange[0] - 1); CTCol rangeCol = insertCol(cols, overlappingRange[0], overlappingRange[1], new CTCol[] {ithCol, col}); i++; CTCol newCol = insertCol(cols, (overlappingRange[1] + 1), col.getMax(), new CTCol[] {col}); i++; } else if (overlappingType == NumericRanges.OVERLAPS_2_MINOR) { ithCol.setMin(overlappingRange[1] + 1); CTCol rangeCol = insertCol(cols, overlappingRange[0], overlappingRange[1], new CTCol[] {ithCol, col}); i++; CTCol newCol = insertCol(cols, col.getMin(), (overlappingRange[0] - 1), new CTCol[] {col}); i++; } else if (overlappingType == NumericRanges.OVERLAPS_2_WRAPS) { setColumnAttributes(col, ithCol); if (col.getMin() != ithCol.getMin()) { CTCol newColBefore = insertCol(cols, col.getMin(), (ithCol.getMin() - 1), new CTCol[] {col}); i++; } if (col.getMax() != ithCol.getMax()) { CTCol newColAfter = insertCol(cols, (ithCol.getMax() + 1), col.getMax(), new CTCol[] {col}); i++; } } else if (overlappingType == NumericRanges.OVERLAPS_1_WRAPS) { if (col.getMin() != ithCol.getMin()) { CTCol newColBefore = insertCol(cols, ithCol.getMin(), (col.getMin() - 1), new CTCol[] {ithCol}); i++; } if (col.getMax() != ithCol.getMax()) { CTCol newColAfter = insertCol(cols, (col.getMax() + 1), ithCol.getMax(), new CTCol[] {ithCol}); i++; } ithCol.setMin(overlappingRange[0]); ithCol.setMax(overlappingRange[1]); setColumnAttributes(col, ithCol); } if (overlappingType != NumericRanges.NO_OVERLAPS) { colOverlaps = true; } } if (!colOverlaps) { CTCol newCol = cloneCol(cols, col); } sortColumns(cols); return cols; }