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

import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventMapFacade;
import fi.insomnia.bortal.facade.PlaceFacade;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventMap;
import fi.insomnia.bortal.model.Place;
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.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author tuukka
 */
@ManagedBean(name = "TestDataView")
@RequestScoped
public class TestDataView {

    public static final String TEST_MAP_IMAGE_NAME = "testmap.png";
    @EJB
    private EventMapFacade eventMapFacade;
    @EJB
    private EventFacade eventFacade;

    private PlaceFacade placeFacade;

    public void generateData() {
        Event event = generateMetaData();
        EventMap map = generateTestMap(event);
        generateTestPlaces(map);

    }

    private EventMap generateTestMap(Event event) {
        try {
            EventMap map = new EventMap();
            map.setEvent(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(TestDataView.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(TestDataView.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    /**
     * Generate all metashit, ex. events.
     */
    private Event generateMetaData() {
        Event event = new Event();
        event.setName("testEvent");

        eventFacade.create(event);

        return event;
    }

    private void generateTestPlaces(EventMap map) {

        for (int x = 5; x < 400; x += 50) {
            for (int y = 5; y < 150; y += 50) {
                Place place = new Place();
                place.setMap(map);
                place.setMapX(x);
                place.setMapY(y);
                placeFacade.create(place);
            }
        }
    }

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

    /**
     * @return the eventMapFacade
     */
    public EventMapFacade getEventMapFacade() {
        return eventMapFacade;
    }

    /**
     * @param eventMapFacade the eventMapFacade to set
     */
    public void setEventMapFacade(EventMapFacade eventMapFacade) {
        this.eventMapFacade = eventMapFacade;
    }

    /**
     * @return the eventFacade
     */
    public EventFacade getEventFacade() {
        return eventFacade;
    }

    /**
     * @param eventFacade the eventFacade to set
     */
    public void setEventFacade(EventFacade eventFacade) {
        this.eventFacade = eventFacade;
    }

    /**
     * @return the placeFacade
     */
    public PlaceFacade getPlaceFacade() {
        return placeFacade;
    }

    /**
     * @param placeFacade the placeFacade to set
     */
    public void setPlaceFacade(PlaceFacade placeFacade) {
        this.placeFacade = placeFacade;
    }
}