/** * Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onebusaway.webapp.gwt.oba_library.model; import org.onebusaway.geospatial.model.EncodedPolygonBean; import org.onebusaway.geospatial.model.EncodedPolylineBean; import org.onebusaway.webapp.gwt.common.model.AbstractModel; import com.google.gwt.maps.client.overlay.EncodedPolyline; import com.google.gwt.maps.client.overlay.Polygon; import java.util.ArrayList; import java.util.List; public class TimedPolygonModel extends AbstractModel<TimedPolygonModel> { private List<TimedPolygon> _polygons = new ArrayList<TimedPolygon>(); private int _minTime; private int _maxTime; private boolean _complete = false; public List<TimedPolygon> getPolygons() { return _polygons; } public int getMinTime() { return _minTime; } public int getMaxTime() { return _maxTime; } public boolean isComplete() { return _complete; } public void setData(List<EncodedPolygonBean> polygons, List<Integer> times, boolean complete) { _polygons.clear(); _minTime = Integer.MAX_VALUE; _maxTime = 0; _complete = complete; for (int i = 0; i < polygons.size(); i++) { EncodedPolygonBean bean = polygons.get(i); List<EncodedPolylineBean> inner = bean.getInnerRings(); EncodedPolyline[] lines = new EncodedPolyline[1 + inner.size()]; lines[0] = createPolyline(bean.getOuterRing()); for (int x = 0; x < inner.size(); x++) lines[1 + x] = createPolyline(inner.get(x)); int time = times.get(i); _minTime = Math.min(time, _minTime); _maxTime = Math.max(time, _maxTime); Polygon poly = Polygon.fromEncoded(lines, true, "#0000FF", 0.1, true); TimedPolygon tp = new TimedPolygon(poly, time); _polygons.add(tp); } refresh(); } private EncodedPolyline createPolyline(EncodedPolylineBean outer) { EncodedPolyline ep = EncodedPolyline.newInstance(); ep.setPoints(outer.getPoints()); ep.setLevels(outer.getLevels(3)); ep.setZoomFactor(32); ep.setNumLevels(4); return ep; } private void refresh() { fireModelChange(this); } }