Example usage for com.google.common.collect TreeRangeSet subRangeSet

List of usage examples for com.google.common.collect TreeRangeSet subRangeSet

Introduction

In this page you can find the example usage for com.google.common.collect TreeRangeSet subRangeSet.

Prototype

@Override
    public RangeSet<C> subRangeSet(Range<C> view) 

Source Link

Usage

From source file:org.mskcc.shenkers.view.StackedIntervalView.java

public void setData(List<Pair<Integer, Integer>> intervals) {

    Collections.sort(intervals, new Comparator<Pair<Integer, Integer>>() {

        @Override//from   w w w .j av a2s  .c  o  m
        public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) {
            return o1.getKey() - o2.getKey();
        }
    });

    //        Pair<Integer, Integer> r = intervals.get(0);
    for (Pair<Integer, Integer> interval : intervals) {
        Range<Integer> range = Range.closed(interval.getKey(), interval.getValue());
        int i = 0;
        added: {
            // add the interval to the first row that doesn't intersect with
            while (i < rows.size()) {
                TreeRangeSet<Integer> set = rows.get(i);
                RangeSet<Integer> intersection = set.subRangeSet(
                        Range.closed(interval.getKey() - minSpace, interval.getValue() + minSpace));
                if (intersection.isEmpty()) {
                    set.add(range);
                    break added;
                }
                i++;
            }
            TreeRangeSet<Integer> row = TreeRangeSet.create();
            row.add(range);
            rows.add(row);
        }
    }

    List<Node> content = new ArrayList<>();
    for (RangeSet<Integer> row : rows) {
        RangeSetIntervalView rowView = new RangeSetIntervalView(min, max);
        rowView.setData(row);
        content.add(rowView);
    }

    getChildren().setAll(content);
}

From source file:org.mskcc.shenkers.view.GenericStackedIntervalView.java

public void setData(List<Pair<Integer, Integer>> intervals, List<T> content) {
    rows.clear();/*from  ww  w .  ja  v a 2  s  .c o m*/
    rowNodes.clear();

    rows.add(TreeRangeSet.create());
    rowNodes.add(new ArrayList<>());

    List<IntervalNode<T>> nodes = Stream.iterate(0, i -> i + 1).limit(intervals.size())
            .map(i -> new IntervalNode<T>(intervals.get(i), content.get(i))).collect(Collectors.toList());

    Collections.sort(nodes, new Comparator<IntervalNode<T>>() {

        @Override
        public int compare(IntervalNode<T> o1, IntervalNode<T> o2) {
            return o1.interval.getKey() - o2.interval.getKey();
        }
    });

    for (IntervalNode inode : nodes) {
        Pair<Integer, Integer> interval = inode.interval;
        Range<Integer> range = Range.closed(interval.getKey(), interval.getValue());
        logger.info("stacking {}", interval);
        int i = 0;
        added: {
            // add the interval to the first row that doesn't intersect with
            while (i < rows.size()) {
                TreeRangeSet<Integer> set = rows.get(i);
                List<IntervalNode<T>> rowContent = rowNodes.get(i);
                RangeSet<Integer> intersection = set.subRangeSet(
                        Range.closed(interval.getKey() - minSpace, interval.getValue() + minSpace));
                if (intersection.isEmpty()) {
                    set.add(range);
                    rowContent.add(inode);
                    logger.info("no intersections in row {}", i);
                    break added;
                }
                logger.info("intersects in row {} {}", i, set);
                i++;
            }

            TreeRangeSet<Integer> row = TreeRangeSet.create();
            row.add(range);
            rows.add(row);

            List<IntervalNode<T>> rowContent = new ArrayList<>();
            rowContent.add(inode);
            rowNodes.add(rowContent);
        }
    }

    //        {
    //            Rectangle background = new Rectangle();
    //            background.setFill(Color.WHITE);
    //            background.widthProperty().bind(widthProperty());
    //            background.heightProperty().bind(heightProperty());
    //            getChildren().add(background);
    //        }

    List<T> children = new ArrayList<>();

    for (List<IntervalNode<T>> row : rowNodes) {
        GenericIntervalView<T> rowView = new GenericIntervalView<>(min, max);

        List<Pair<Integer, Integer>> rowIntervals = new ArrayList<>(row.size());
        List<T> rowContent = new ArrayList<>(row.size());
        row.stream().forEach(i -> {
            rowIntervals.add(i.interval);
            rowContent.add(i.content);
        });
        rowView.setData(rowIntervals, rowContent);
        rowView.flipDomainProperty().bind(flipDomain);

        children.add((T) rowView);
    }

    getChildren().addAll(children);
}