TestDataBean.java 4.01 KB
package fi.insomnia.bortal.beans;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
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.EventOrganiser;
import fi.insomnia.bortal.model.EventStatus;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.User;

/**
 * Session Bean implementation class TestDataBean
 */
@Stateless
public class TestDataBean implements TestDataBeanLocal {
    public static final String TEST_MAP_IMAGE_NAME = "testmap.png";

    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(TestDataBean.class);
    @EJB
    private EventMapFacade eventMapFacade;
    @EJB
    private EventStatusBeanLocal eventStatusBean;
    @EJB
    private EventOrganiserFacade eventOrganiserFacade;

    @EJB
    private EventFacade eventFacade;
    @EJB
    private UserFacade userFacade;
    @EJB
    private PlaceFacade placeFacade;

    /**
     * Default constructor.
     */
    public TestDataBean() {
        // TODO Auto-generated constructor stub
    }

    public EventMap generateTestMap(Event event) {
        try {
            logger.info("Generating Test Map for event: " + event);
            EventMap map = new EventMap(event);

            InputStream stream = getClass().getResourceAsStream(TEST_MAP_IMAGE_NAME);
            File file = new File(getClass().getResource(TEST_MAP_IMAGE_NAME).toURI());

            long length = file.length();

            // Create the byte array to hold the data
            byte[] bytes = new byte[(int) length];

            // Read in the bytes
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length
                    && (numRead = stream.read(bytes, offset, bytes.length - offset)) >= 0) {
                offset += numRead;
            }

            // Ensure all the bytes have been read in
            if (offset < bytes.length) {
                throw new IOException("Could not completely read file " + file.getName());
            }

            stream.close();

            map.setMapData(bytes);

            eventMapFacade.create(map);

            return map;

        } catch (URISyntaxException ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /**
     * Generate all metashit, ex. events.
     */
    public Event generateMetaData() {

        EventStatus status = eventStatusBean.findOrCreateDefaultEventStatus();

        EventOrganiser settings = new EventOrganiser();
        settings.setOrganisation("MUN ORGANISAATIO; EI SUN!");
        settings.setAdmin(generateUser());
        eventOrganiserFacade.create(settings);

        Event event = new Event();
        event.setName("testEvent");
        event.setOrganiser(settings);
        event.setStatus(status);

        eventFacade.create(event);

        return event;
    }

    private User generateUser() {
        User user = new User();

        user.setNick("Nick");
        user.setPassword("plaah");

        userFacade.create(user);

        return user;
    }

    public void generateTestPlaces(EventMap map) {
        
        logger.info("Adding places to map {}, event {}", map);
        for (int x = 5; x < 400; x += 50) {
            for (int y = 5; y < 150; y += 50) {
                Place place = new Place(map);
                place.setMapX(x);
                place.setMapY(y);
                placeFacade.create(place);
            }
        }
    }

  

}