teichmann@5831: package org.dive4elements.river.artifacts.model; rrenkert@4618: rrenkert@4618: import java.util.HashMap; rrenkert@4618: import java.util.Map; rrenkert@4618: import java.util.Set; rrenkert@4618: import java.util.TreeMap; rrenkert@4618: rrenkert@4618: import org.apache.log4j.Logger; rrenkert@4618: teichmann@5831: import org.dive4elements.river.artifacts.math.Linear; rrenkert@4618: rrenkert@4618: rrenkert@4618: public class ZoomScale rrenkert@4618: { rrenkert@4618: private static Logger logger = Logger.getLogger(ZoomScale.class); rrenkert@4618: rrenkert@4618: private HashMap> rivers; rrenkert@4618: rrenkert@4618: public ZoomScale() { rrenkert@4618: this.rivers = new HashMap>(); rrenkert@4618: } rrenkert@4618: rrenkert@4618: public ZoomScale(String river) { rrenkert@4618: this(); rrenkert@4618: rivers.put(river, new TreeMap()); rrenkert@4618: } rrenkert@4618: rrenkert@4618: public double getRadius(String river, double lower, double upper) { rrenkert@4618: double range = Math.abs(upper) - Math.abs(lower); rrenkert@4618: TreeMap ranges = rivers.get(river); rrenkert@4618: if (ranges == null) { rrenkert@4618: return 0.001; rrenkert@4618: } rrenkert@4618: Map.Entry next = ranges.higherEntry(range); rrenkert@4618: Map.Entry prev = ranges.lowerEntry(range); rrenkert@4618: double x0 = 0d; rrenkert@4618: double x1 = 0d; rrenkert@4618: double y0 = 0d; rrenkert@4618: double y1 = 0d; rrenkert@4618: if (prev == null && next != null) { rrenkert@4618: x1 = next.getKey(); rrenkert@4618: y1 = next.getValue(); rrenkert@4618: } rrenkert@4618: else if (prev != null && next == null) { rrenkert@4618: return prev.getValue(); rrenkert@4618: } rrenkert@4618: else { rrenkert@4618: x0 = prev.getKey(); rrenkert@4618: x1 = next.getKey(); rrenkert@4618: y0 = prev.getValue(); rrenkert@4618: y1 = next.getValue(); rrenkert@4618: } rrenkert@4618: return Linear.linear(range, x0, x1, y0, y1); rrenkert@4618: } rrenkert@4618: rrenkert@4618: public void addRiver(String river) { rrenkert@4618: if (!this.rivers.containsKey(river)) { rrenkert@4618: this.rivers.put(river, new TreeMap()); rrenkert@4618: } rrenkert@4618: } rrenkert@4618: rrenkert@4618: public Set getRivers() { rrenkert@4618: return this.rivers.keySet(); rrenkert@4618: } rrenkert@4618: rrenkert@4618: public void addRange(String river, double range, double radius) { rrenkert@4618: if (this.rivers.containsKey(river)) { rrenkert@4618: this.rivers.get(river).put(range, radius); rrenkert@4618: } rrenkert@4618: else { rrenkert@4618: this.rivers.put(river, new TreeMap()); rrenkert@4618: this.rivers.get(river).put(range, radius); rrenkert@4618: } rrenkert@4618: } rrenkert@4618: }