package polly.rx.graphs;
import java.awt.Color;
import java.util.Collection;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import polly.rx.graphs.Point.PointType;
public class PointSet implements Set<Point> {
private Color color;
private Color connectColor;
private final Set<Point> backend;
private String name;
private boolean connect;
private float strength;
private YScale scale;
public PointSet() {
this(Color.BLACK);
}
public PointSet(Color color) {
this.backend = new TreeSet<Point>();
this.color = color;
this.name = ""; //$NON-NLS-1$
this.strength = 1.f;
}
public void setScale(YScale scale) {
this.scale = scale;
}
public YScale getScale() {
return this.scale;
}
public void setStrength(float strength) {
this.strength = strength;
}
public float getStrength() {
return this.strength;
}
public YScale calculateScale(String name, int steps) {
if (this.isEmpty()) {
// HACK: ???
return null;
}
final Point first = this.iterator().next();
double min = first.getY();
double max = first.getY();
for (final Point p : this) {
min = Math.min(min, p.getY());
max = Math.max(max, p.getY());
}
double whole = Math.max(max - min, 1);
double percentage = Math.ceil(whole * 0.1);
min = Math.max(0, min - percentage);
max = max + percentage;
final int step = (int) Math.ceil((max - min) / steps);
return new YScale(name, (int) min, (int) max, step);
}
public void setConnectColor(Color connectColor) {
this.connectColor = connectColor;
}
public Color getConnectColor() {
if (this.connectColor == null) {
return this.color;
}
return this.connectColor;
}
public void setConnect(boolean connect) {
this.connect = connect;
}
public boolean isConnect() {
return this.connect;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Color getColor() {
return this.color;
}
public void setColor(Color color) {
this.color = color;
}
@Override
public boolean add(Point e) {
return this.backend.add(e);
}
public boolean add(double x, double y, PointType type) {
return this.add(new Point(x, y, type));
}
@Override
public boolean addAll(Collection<? extends Point> c) {
return this.backend.addAll(c);
}
@Override
public void clear() {
this.backend.clear();
}
@Override
public boolean contains(Object o) {
return this.backend.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return this.backend.containsAll(c);
}
@Override
public boolean isEmpty() {
return backend.isEmpty();
}
@Override
public Iterator<Point> iterator() {
return this.backend.iterator();
}
@Override
public boolean remove(Object o) {
return this.backend.remove(o);
}
@Override
public boolean removeAll(Collection<?> c) {
return this.backend.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return this.backend.retainAll(c);
}
@Override
public int size() {
return this.backend.size();
}
@Override
public Object[] toArray() {
return this.backend.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return this.backend.toArray(a);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.backend == null) ? 0 : this.backend.hashCode());
result = prime * result + ((this.color == null) ? 0 : this.color.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
} else if (obj == this) {
return true;
} else if (!(obj instanceof PointSet)) {
return false;
}
final PointSet other = (PointSet) obj;
return other.color.equals(this.color) && other.backend.equals(this.backend);
}
}