PlaceMapBean.java 3.08 KB
package fi.insomnia.bortal.beans;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.imageio.ImageIO;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.facade.UserFacade;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.EventPk;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;
import java.util.ArrayList;

/**
 * Session Bean implementation class PlaceMapBean
 */
@Stateless
public class PlaceMapBean implements PlaceMapBeanLocal {

    private static final Logger logger = LoggerFactory.getLogger(PlaceMapBean.class);

    /**
     * Default constructor.
     */
    public PlaceMapBean() {
        // TODO Auto-generated constructor stub
    }
    @EJB
    private PlaceFacade placeFacade;
    @EJB
    private EventMapFacade eventMapFacade;
    @EJB
    private UserFacade userFacade;

    @Override
    public void printPlaceMapToStream(OutputStream outputStream, String filetype, Event event, Integer mapId, Integer userId, List<Integer> placeIds) throws IOException {

        Integer eventId = event.getId();
        List<Place> selectedPlaceList = new ArrayList<Place>();
        EventMap map = null;

        for (Integer id : placeIds) {
            selectedPlaceList.add(placeFacade.find(eventId, id));
        }

        logger.info("Got event {}, mapid {}", event, mapId);

        if (selectedPlaceList.size() > 0) {
            map = selectedPlaceList.get(0).getMap();
        } else {
            map = eventMapFacade.find(eventId, mapId);
        }

        List<Place> places = map.getPlaces();


        logger.info("Places: from map {}", places.size());

        BufferedImage image = map.getMapWithPlaces();

        if (userId != null) {
            User user = userFacade.find(userId);

            if (user != null) {
                for (PlaceGroup uplacegroup : user.getPlaceGroups()) {
                    for (Place uplace : uplacegroup.getPlaces()) {
                        if (uplace.getMap().equals(map)) {
                            uplace.drawOwnedPlace(image);
                        }
                    }
                }
            }
        }

        for (Place place : selectedPlaceList) {
            place.drawSelectedPlace(image);
        }

        ImageIO.write(image, filetype, outputStream);
    }

    public String getSelectPlaceMapUrl(EventMap activeMap, Place selectedPlace, User user) {

        String parameters = "?";

        if (selectedPlace != null) {
            parameters += "placeid=" + selectedPlace.getId().getId();
        } else {
            parameters += "mapid=" + activeMap.getId().getId();
        }

        if (user != null) {
            parameters += "&userid=" + user.getId();
        }


        return "/PlaceMap" + parameters;
        // TODO: do something.
    }
}