MapView.java 3.56 KB
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fi.insomnia.bortal.view;

import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author tuukka
 */
@ManagedBean(name = "mapView")
@SessionScoped
public class MapView {

    private Logger logger = LoggerFactory.getLogger(MapView.class);

    @EJB
    private PlaceMapBeanLocal placeMapBean;

    @EJB
    private PlaceBeanLocal placeBean;


    @ManagedProperty("#{sessionHandler}")
    private SessionHandler sessionHandler;
    private EventMap activeMap = null;
    private List<Place> selectedPlaces = new ArrayList<Place>();
    //private Place selectedPlace = null;

    /** Creates a new instance of MapView */
    public MapView() {
    }

    public void placeSelectActionListener(ActionEvent e) {
        FacesContext context = FacesContext.getCurrentInstance();
        String clientId = e.getComponent().getClientId(context);
        Map requestParams = context.getExternalContext().getRequestParameterMap();
        int x = new Integer((String) requestParams.get(clientId + ".x")).intValue();
        int y = new Integer((String) requestParams.get(clientId + ".y")).intValue();

        Place place = getActiveMap().findPlace(x, y);

        if (place != null) {
            if (selectedPlaces.contains(place)) {
                selectedPlaces.remove(place);
                place.setReserved(false);
                placeBean.mergeChanges(place);
            } else {
                selectedPlaces.add(place);
                place.setReserved(true);
                placeBean.mergeChanges(place);
            }
        }
    }

    public String getSelectPlaceMapUrl() {
        User user = sessionHandler.getUser();
        EventMap map = getActiveMap();

        if (map == null) {
            return "";
        }

        return placeMapBean.getSelectPlaceMapUrl(getActiveMap(), selectedPlaces, user);
    }

    /**
     * @return the activeMap, if it's not setted, return events first map. If this event does not have map, return null.
     */
    public EventMap getActiveMap() {

        if (activeMap == null) {

            if (sessionHandler.getCurrentEvent().getEventMaps().size() >= 1) {
                activeMap = sessionHandler.getCurrentEvent().getEventMaps().get(0);
            }
        }

        return activeMap;
    }

    /**
     * @param activeMap the activeMap to set
     */
    public void setActiveMap(EventMap activeMap) {
        this.activeMap = activeMap;
    }

    /**
     * @return the sessionHandler
     */
    public SessionHandler getSessionHandler() {
        return sessionHandler;
    }

    /**
     * @param sessionHandler the sessionHandler to set
     */
    public void setSessionHandler(SessionHandler sessionHandler) {
        this.sessionHandler = sessionHandler;
    }

    public String placeLeftToSelect() {
        int totalPlaces = placeMapBean.selectablePlaceCount(sessionHandler.getUser(), sessionHandler.getCurrentEvent());

        return (totalPlaces - selectedPlaces.size())+"";
    }
}