MapView.java 3.87 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.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
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;
    @EJB
    private UserBeanLocal userBean;

    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) {
        userBean.fatalPermission(Permission.TICKET_SALES, RolePermission.EXECUTE);

        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 = userBean.getCurrentUser();
        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() {
        userBean.fatalPermission(Permission.TICKET_SALES, RolePermission.READ);

        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;
    }

 

    public String placeLeftToSelect() {
        long totalPlaces = placeMapBean.selectablePlaceCount(userBean.getCurrentUser());

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