/*
* Copyright 2009 Prime Technology.
*
* 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.primefaces.examples.view;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.event.map.MarkerDragEvent;
import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.event.map.PointSelectEvent;
import org.primefaces.event.map.StateChangeEvent;
import org.primefaces.examples.domain.CheckIn;
import org.primefaces.model.map.Circle;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.LatLngBounds;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;
import org.primefaces.model.map.Polygon;
import org.primefaces.model.map.Polyline;
import org.primefaces.model.map.Rectangle;
import org.primefaces.push.PushContext;
import org.primefaces.push.PushContextFactory;
public class MapBean implements Serializable {
private MapModel emptyModel;
private MapModel simpleModel;
private MapModel advancedModel;
private MapModel polylineModel;
private MapModel polygonModel;
private MapModel circleModel;
private MapModel rectangleModel;
private MapModel draggableModel;
private Marker marker;
private String title;
private double lat;
private double lng;
public MapBean() {
emptyModel = new DefaultMapModel();
simpleModel = new DefaultMapModel();
advancedModel = new DefaultMapModel();
polylineModel = new DefaultMapModel();
polygonModel = new DefaultMapModel();
circleModel = new DefaultMapModel();
rectangleModel = new DefaultMapModel();
draggableModel = new DefaultMapModel();
//Shared coordinates
LatLng coord1 = new LatLng(36.879466, 30.667648);
LatLng coord2 = new LatLng(36.883707, 30.689216);
LatLng coord3 = new LatLng(36.879703, 30.706707);
LatLng coord4 = new LatLng(36.885233, 30.702323);
//Basic marker
simpleModel.addOverlay(new Marker(coord1, "Konyaalti"));
simpleModel.addOverlay(new Marker(coord2, "Ataturk Parki"));
simpleModel.addOverlay(new Marker(coord3, "Karaalioglu Parki"));
simpleModel.addOverlay(new Marker(coord4, "Kaleici"));
//Icons and Data
advancedModel.addOverlay(new Marker(coord1, "Konyaalti", "konyaalti.png", "http://maps.google.com/mapfiles/ms/micons/blue-dot.png"));
advancedModel.addOverlay(new Marker(coord2, "Ataturk Parki", "ataturkparki.png"));
advancedModel.addOverlay(new Marker(coord4, "Kaleici", "kaleici.png", "http://maps.google.com/mapfiles/ms/micons/pink-dot.png"));
advancedModel.addOverlay(new Marker(coord3, "Karaalioglu Parki", "karaalioglu.png", "http://maps.google.com/mapfiles/ms/micons/yellow-dot.png"));
//Draggable
draggableModel.addOverlay(new Marker(coord1, "Konyaalti"));
draggableModel.addOverlay(new Marker(coord2, "Ataturk Parki"));
draggableModel.addOverlay(new Marker(coord3, "Karaalioglu Parki"));
draggableModel.addOverlay(new Marker(coord4, "Kaleici"));
for(Marker marker : draggableModel.getMarkers()) {
marker.setDraggable(true);
}
//Polyline
Polyline polyline = new Polyline();
polyline.getPaths().add(coord1);
polyline.getPaths().add(coord2);
polyline.getPaths().add(coord3);
polyline.getPaths().add(coord4);
polyline.setStrokeWeight(10);
polyline.setStrokeColor("#FF9900");
polyline.setStrokeOpacity(0.7);
polylineModel.addOverlay(polyline);
//Polygon
Polygon polygon = new Polygon();
polygon.getPaths().add(coord1);
polygon.getPaths().add(coord2);
polygon.getPaths().add(coord3);
polygon.setStrokeColor("#FF9900");
polygon.setFillColor("#FF9900");
polygon.setStrokeOpacity(0.7);
polygon.setFillOpacity(0.7);
polygonModel.addOverlay(polygon);
//Circle
Circle circle1 = new Circle(coord1, 500);
circle1.setStrokeColor("#d93c3c");
circle1.setFillColor("#d93c3c");
circle1.setFillOpacity(0.5);
Circle circle2 = new Circle(coord4, 300);
circle2.setStrokeColor("#00ff00");
circle2.setFillColor("#00ff00");
circle2.setStrokeOpacity(0.7);
circle2.setFillOpacity(0.7);
circleModel.addOverlay(circle1);
circleModel.addOverlay(circle2);
//Rectangle
Rectangle rect = new Rectangle(new LatLngBounds(coord1, coord4));
rect.setStrokeColor("#d93c3c");
rect.setFillColor("#d93c3c");
rect.setFillOpacity(0.5);
rectangleModel.addOverlay(rect);
}
public MapModel getAdvancedModel() {
return advancedModel;
}
public MapModel getSimpleModel() {
return simpleModel;
}
public MapModel getPolylineModel() {
return polylineModel;
}
public MapModel getPolygonModel() {
return polygonModel;
}
public MapModel getCircleModel() {
return circleModel;
}
public MapModel getRectangleModel() {
return rectangleModel;
}
public MapModel getEmptyModel() {
return emptyModel;
}
public MapModel getDraggableModel() {
return draggableModel;
}
public void onMarkerSelect(OverlaySelectEvent event) {
marker = (Marker) event.getOverlay();
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Selected", marker.getTitle()));
}
public void onPolylineSelect(OverlaySelectEvent event) {
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Polyline Selected", null));
}
public void onPolygonSelect(OverlaySelectEvent event) {
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Polygon Selected", null));
}
public void onCircleSelect(OverlaySelectEvent event) {
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Circle Selected", null));
}
public void onRectangleSelect(OverlaySelectEvent event) {
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Rectangle Selected", null));
}
public void onMarkerDrag(MarkerDragEvent event) {
marker = event.getMarker();
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Dragged", "Lat:" + marker.getLatlng().getLat() + ", Lng:" + marker.getLatlng().getLng()));
}
public void onStateChange(StateChangeEvent event) {
LatLngBounds bounds = event.getBounds();
int zoomLevel = event.getZoomLevel();
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Zoom Level", String.valueOf(zoomLevel)));
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Center", event.getCenter().toString()));
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "NorthEast", bounds.getNorthEast().toString()));
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "SouthWest", bounds.getSouthWest().toString()));
}
public void onPointSelect(PointSelectEvent event) {
LatLng latlng = event.getLatLng();
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Point Selected", "Lat:" + latlng.getLat() + ", Lng:" + latlng.getLng()));
}
public Marker getMarker() {
return marker;
}
public void addMessage(FacesMessage message) {
FacesContext.getCurrentInstance().addMessage(null, message);
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public void addMarker(ActionEvent actionEvent) {
Marker marker = new Marker(new LatLng(lat, lng), title);
emptyModel.addOverlay(marker);
addMessage(new FacesMessage(FacesMessage.SEVERITY_INFO, "Marker Added", "Lat:" + lat + ", Lng:" + lng));
}
public void checkin() {
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/check-in", new CheckIn(title, lat, lng));
}
}