Package org.spw.controller

Source Code of org.spw.controller.EventController

/*
* EventController.java
*
* Created on 4 May 2007, 19:56
*
*/

package org.spw.controller;

import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import org.spw.model.Contact;
import org.spw.model.Event;

/**
* Manage the Events.
* Implement CRUD operation and list of reminders
* @author PSe
*/
public class EventController {
   
    private final EntityManagerFactory emf;
   
    /** Creates a new instance of EventController */
    public EventController() {
        Properties props = PropertiesLoader.loadProperties("database.properties");
        if (props != null)
        {
            emf = Persistence.createEntityManagerFactory("VolunteerPU", props);
        }
        else
        {
            emf = Persistence.createEntityManagerFactory("VolunteerPU");
        }
    }
   
    /**
     * Retrieve all the events
     * @return List of all the events
     */
    public List<Event> getEvents() {
        EntityManager em = emf.createEntityManager();
        List<Event> result = null;
        try {
            Query query = em.createNamedQuery("Event.findAll");
            result = query.getResultList();
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error Query all Event", e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
        return result;
    }
   
    /**
     *
     * @param object
     */
    public void create(Event object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error creating " + object, e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
   
    /**
     *
     * @param key
     * @return
     */
    public Event read(Long key) {
        EntityManager em = emf.createEntityManager();
        Event retValue = null;
        try {
            retValue = em.find(Event.class, key);
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error reading " + key, e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
        return retValue;
    }
   
    /**
     *
     * @param object
     * @return
     */
    public Event update(Event object) {
        Event result = null;
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            result = em.merge(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error updating " + object, e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
        return result;
    }
   
   
    /**
     *
     * @param object
     */
    public void delete(Event object) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            Event entity = em.find(Event.class, object.getIdEvent());
            em.remove(entity);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error deleting " + object, e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
   
    /**
     * Parse a string representation and return the corresponding eventString
     *
     * @param eventString String representation
     * @return The corresponding event
     */
    public Event parse(String eventString) {
        if (eventString == null) return null;
        int begin = eventString.lastIndexOf('[') + 1;
        if (begin < 0) return null;
        int last  = eventString.lastIndexOf(']');
        if (last < 0) return null;
        String number = eventString.substring(begin, last);
        Event retValue = null;
        try {
            retValue = read(Long.parseLong(number));
        } catch (NumberFormatException ex) {
            //incorrect number, could not appen
            Logger.getLogger(EventController.class.getName()).severe(eventString +
                    " is incorrect as a string version of a Event to parse. [" +
                    ex.getLocalizedMessage() + "]");
        }
        return retValue;
    }
   
    /**
     * Return all the Event with a reminder
     * @return The list of event with an active reminder
     */
    public List<Event> getReminders() {
        EntityManager em = emf.createEntityManager();
        List<Event> result = null;
        try {
//            BROKEN : CURRENT_DATE is obtained with TO_DATE( SYSDATE )
//            - TO_DATE is unknow in H2 database
//            - SYSDATE is unknow in MySQL database
//            Query query = em.createQuery("SELECT e FROM Event as e WHERE " +
//                    "e.reminderDate >= CURRENT_DATE");
            // Adapt query to be run with any db
            Query query = em.createNamedQuery("Event.findReminders");
            query.setParameter("theDate", new Date(), TemporalType.DATE);
            result = query.getResultList();
        } catch (Exception e) {
            Logger.getLogger(EventController.class.getName()).log(Level.SEVERE, "Error Query all Event", e);
            if (em.getTransaction().isActive())
                em.getTransaction().rollback();
        } finally {
            em.close();
        }
        return result;
    }
   
    /**
     * Add or update the attendance of the contact to an event.
     * This method manage the consistence of the operation in one transaction
     *
     * @param contact the attending contact.
     * @param event the event attended.
     */
    public void addAttendance(Contact contact, Event event) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
       
        if (!event.getContactsAttended().contains(contact)) {
            event.getContactsAttended().add(contact);
        }
        event = em.merge(event);
       
        if (!contact.getEventsAttended().contains(event)) {
            contact.getEventsAttended().add(event);
        }
        contact = em.merge(contact);

        em.getTransaction().commit();
        em.close();
    }
   
    /**
     * Remove the attendance of the contact to an event.
     * @param contact the attending contact.
     * @param event the event attended.
     */
    public void removeAttendance(Contact contact, Event event) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
       
        if (event.getContactsAttended().contains(contact)) {
            event.getContactsAttended().remove(contact);
        }
        event = em.merge(event);
       
        if (contact.getEventsAttended().contains(event)) {
            contact.getEventsAttended().remove(event);
        }
        contact = em.merge(contact);

        em.getTransaction().commit();
        em.close();
    }

    /**
     * Add or update the attendance of the contact to an event.
     * This method manage the consistence of the operation in one transaction
     *
     * @param contact the attending contact.
     * @param event the event attended.
     */
    public void addOrganizer(Contact contact, Event event) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
       
        if (!event.getOrganizedBy().contains(contact)) {
            event.getOrganizedBy().add(contact);
        }
        event = em.merge(event);
       
        if (!contact.getOrganize().contains(event)) {
            contact.getOrganize().add(event);
        }
        contact = em.merge(contact);

        em.getTransaction().commit();
        em.close();
    }
   
    /**
     * Remove the attendance of the contact to an event.
     * @param contact the attending contact.
     * @param event the event attended.
     */
    public void removeOrganizer(Contact contact, Event event) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
       
        if (event.getOrganizedBy().contains(contact)) {
            event.getOrganizedBy().remove(contact);
        }
        event = em.merge(event);
       
        if (contact.getOrganize().contains(event)) {
            contact.getOrganize().remove(event);
        }
        contact = em.merge(contact);

        em.getTransaction().commit();
        em.close();
    }
}
TOP

Related Classes of org.spw.controller.EventController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.