package com.yoursway.experiments.birdseye.model;
import static com.google.common.collect.Lists.newArrayList;
import static java.util.Collections.binarySearch;
import static java.util.Collections.sort;
import java.util.Collection;
import java.util.List;
import org.eclipse.swt.graphics.Point;
public class Container extends Node {
private final Node child;
public Container(Collection<Node> children) {
this.child = translateIntoCompartments(children);
}
private Node translateIntoCompartments(Collection<Node> children) {
List<Node> elements = newArrayList(children);
NodeSizeComparator comparator = new NodeSizeComparator();
sort(elements, comparator);
while(elements.size() > 1) {
Node last = elements.remove(elements.size() - 1);
Node prev = elements.remove(elements.size() - 1);
Compartment compartment = new Compartment(prev, last);
int index = binarySearch(elements, compartment, comparator);
if (index < 0)
index = -(index + 1);
elements.add(index, compartment);
}
Node child = elements.get(0);
if (child == null)
throw new AssertionError("child is null");
return child;
}
public Node child() {
return child;
}
@Override
public double size() {
return child.size();
}
public Leaf pick(Point point) {
return child.pick(point);
}
}