/*
* Created on Nov 15, 2006
*
* TODO
*
* To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.seqcode.projects.seqview;
import java.awt.*;
import java.util.*;
import org.seqcode.gseutils.Pair;
public class RectangleLookup<X> {
private Vector<Pair<X,Rectangle>> values;
private Map<Rectangle,Set<X>> lookup;
public RectangleLookup() {
values = new Vector<Pair<X,Rectangle>>();
lookup = new HashMap<Rectangle,Set<X>>();
}
public void clear() { values.clear(); lookup.clear(); }
public Collection<Pair<X,Rectangle>> getValueList() {
return new LinkedList<Pair<X,Rectangle>>(values);
}
public void clearRectangle(Rectangle r) {
if(lookup.containsKey(r)) {
lookup.remove(r);
}
Iterator<Pair<X,Rectangle>> itr = values.iterator();
while(itr.hasNext()) {
Pair<X,Rectangle> p = itr.next();
if(p.getLast().equals(r)) { itr.remove(); }
}
}
public void addValue(X v, Rectangle r) {
values.add(new Pair<X,Rectangle>(v, r));
if(!lookup.containsKey(r)) { lookup.put(r, new HashSet<X>()); }
lookup.get(r).add(v);
}
public Collection<X> getRectangleValues(Rectangle r) {
return lookup.get(r);
}
public X getFirstValue(Point p) {
for(Pair<X,Rectangle> v : values) {
if(v.getLast().contains(p)) {
return v.getFirst();
}
}
return null;
}
public Collection<X> getAllValues(Point p) {
LinkedList<X> ret = new LinkedList<X>();
for(Pair<X,Rectangle> v : values) {
if(v.getLast().contains(p)) {
ret.addLast(v.getFirst());
}
}
return ret;
}
}