package de.flower.rmt.ui.page.venues.manager.map;
import de.flower.common.ui.panel.BasePanel;
import de.flower.common.util.geo.LatLng;
import de.flower.rmt.model.db.entity.Venue;
import de.flower.rmt.service.IUrlProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import wicket.contrib.gmap3.GMap;
import wicket.contrib.gmap3.overlay.GInfoWindow;
import wicket.contrib.gmap3.overlay.GMarker;
import wicket.contrib.gmap3.overlay.GMarkerOptions;
import wicket.contrib.gmap3.overlay.GOverlayEvent;
import java.util.ArrayList;
import java.util.List;
/**
* @author flowerrrr
*/
public class VenuesMapPanel extends BasePanel {
/** Google maps maximum zoom level in map mode is 19 (22 in satellite). */
public static final int MAX_INITAL_ZOOM_LEVEL = 15;
@SpringBean(name = "urlProvider")
private IUrlProvider urlProvider;
public VenuesMapPanel(IModel<List<Venue>> listModel) {
final GMap map = new GMap("map");
add(map);
map.setDoubleClickZoomEnabled(true);
// NOTE (flowerrrr - 06.12.11) move this code to onbeforeRender if ajax-updates should work
List<LatLng> latLngs = new ArrayList<LatLng>();
for (final Venue venue : listModel.getObject()) {
if (venue.getLatLng() != null) {
final GMarker marker = new GMarker(new GMarkerOptions(map,
venue.getLatLng(),
venue.getName()));
map.addOverlay(marker);
marker.addFunctionListener(GOverlayEvent.CLICK, GInfoWindow.getJSopenFunction(map, VenueMapPanel.getInfoWindowContent(venue, urlProvider.getDirectionsUrl(venue.getLatLng())), marker));
latLngs.add(venue.getLatLng());
}
}
// LatLng center = GeoUtil.centerOf(latLngs);
// map.setCenter(center);
map.fitMarkers(latLngs, MAX_INITAL_ZOOM_LEVEL);
// updates of venue locations must be done via javascript. repainting the whole map
// takes to long and doesn't look nice.
// add(new AjaxUpdateBehavior(Event.EntityAll(Venue.class)));
}
}