MapView.java 3.93 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.EventBeanLocal;
import fi.insomnia.bortal.beans.PlaceBeanLocal;
import fi.insomnia.bortal.beans.PlaceMapBeanLocal;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.LanEvent;
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>();
    @EJB
    private EventBeanLocal eventBean;

    // 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);
            } else {
                selectedPlaces.add(place);
                place.setReserved(true);
            }
            place = placeBean.mergeChanges(place);
        }
        logger.debug("Done calling PlaceSelectActionListener");
    }

    public String getSelectPlaceMapUrl() {
        User user = sessionHandler.getUser();
        logger.debug("Select map got user: {}", user);
        EventMap map = getActiveMap();
        logger.debug("Select map got active map: {}", map);

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

        String ret = placeMapBean.getSelectPlaceMapUrl(getActiveMap(), selectedPlaces, user);
        logger.debug("Returning placemapUrl: {}", ret);
        return ret;
    }

    /**
     * @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) {
            LanEvent event = eventBean.getCurrentEvent();
            if (event.getEventMaps().size() >= 1) {
                activeMap = event.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() {
        long totalPlaces = placeMapBean.selectablePlaceCount(sessionHandler.getUser());

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