/**
* 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.agencies_map;
import java.util.List;
import org.onebusaway.transit_data.model.AgencyBean;
import org.onebusaway.transit_data.model.AgencyWithCoverageBean;
import org.onebusaway.webapp.gwt.common.widgets.DivPanel;
import org.onebusaway.webapp.gwt.where_library.rpc.WebappServiceAsync;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.StyleInjector;
import com.google.gwt.maps.client.InfoWindow;
import com.google.gwt.maps.client.InfoWindowContent;
import com.google.gwt.maps.client.MapWidget;
import com.google.gwt.maps.client.control.MapTypeControl;
import com.google.gwt.maps.client.control.ScaleControl;
import com.google.gwt.maps.client.control.SmallMapControl;
import com.google.gwt.maps.client.event.MarkerClickHandler;
import com.google.gwt.maps.client.geom.LatLng;
import com.google.gwt.maps.client.geom.LatLngBounds;
import com.google.gwt.maps.client.overlay.Marker;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.RootPanel;
public class AgenciesMap implements EntryPoint {
private static AgencyMapResources _resources = GWT.create(AgencyMapResources.class);
private static AgencyMapCssResource _css = _resources.getCss();
@Override
public void onModuleLoad() {
RootPanel panel = RootPanel.get("agencies_map");
if (panel == null) {
System.out.println("you didn't include a div with the id of \"agencies_map\"");
return;
}
MapWidget map = new MapWidget();
map.addControl(new SmallMapControl());
map.addControl(new MapTypeControl());
map.addControl(new ScaleControl());
map.setScrollWheelZoomEnabled(true);
panel.add(map);
StyleInjector.inject(_css.getText());
WebappServiceAsync service = WebappServiceAsync.SERVICE;
service.getAgencies(new AgencyHandler(map));
}
private static class AgencyHandler implements
AsyncCallback<List<AgencyWithCoverageBean>> {
private MapWidget _map;
public AgencyHandler(MapWidget map) {
_map = map;
}
@Override
public void onSuccess(List<AgencyWithCoverageBean> agencies) {
LatLngBounds bounds = LatLngBounds.newInstance();
for (AgencyWithCoverageBean agencyWithCoverage : agencies) {
final AgencyBean agency = agencyWithCoverage.getAgency();
final LatLng point = LatLng.newInstance(agencyWithCoverage.getLat(),
agencyWithCoverage.getLon());
bounds.extend(point);
Marker marker = new Marker(point);
marker.addMarkerClickHandler(new MarkerClickHandler() {
@Override
public void onClick(MarkerClickEvent event) {
InfoWindow window = _map.getInfoWindow();
DivPanel panel = new DivPanel();
DivPanel rowA = new DivPanel(_css.paragraph());
panel.add(rowA);
rowA.add(new Anchor(agency.getName(), agency.getUrl()));
DivPanel rowB = new DivPanel(_css.paragraph());
panel.add(rowB);
rowB.add(new Anchor("jump to map", "index.html#m(location)lat("
+ point.getLatitude() + ")lon(" + point.getLongitude()
+ ")accuracy(4)"));
window.open(point, new InfoWindowContent(panel));
}
});
_map.addOverlay(marker);
}
if (!bounds.isEmpty())
_map.setCenter(bounds.getCenter(), _map.getBoundsZoomLevel(bounds)-1);
}
@Override
public void onFailure(Throwable arg0) {
// TODO Auto-generated method stub
}
}
}