Package com.agilebooster.data.jpa

Source Code of com.agilebooster.data.jpa.ProjectController

/*
* (C) Copyright 2014 Agile Booster.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Maxime ESCOURBIAC
*/
package com.agilebooster.data.jpa;

import com.agilebooster.data.entity.Event;
import com.agilebooster.data.entity.Project;
import com.agilebooster.data.entity.User;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;

/**
* Controller class from Projects table.
*
* @author Maxime ESCOURBIAC
*/
public class ProjectController {

    private final EntityManagerFactory emf;

    /**
     * Default constructor.
     */
    public ProjectController() {
        this.emf = Persistence.createEntityManagerFactory("org.agilebooster_db");
    }

    /**
     * Entity Manager. Manage the object-relational-mapping persistance.
     *
     * @return Entity Manager.
     */
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    /**
     * Create the project in database.
     *
     * @param project Project to create.
     * @return Project created with id value returned. Events are not taken in
     * account because project calendar is empty when the project is created.
     */
    public Project create(Project project) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();

            //Insert project
            em.persist(project);
            em.flush();

            //Update Scrum Master user.
            User scrumMaster = project.getScrumMaster();
            scrumMaster.addAssignedProjectAsSM(project);
            em.merge(scrumMaster);

            //Update Product Owner User.
            User productOwner = project.getProductOwner();
            productOwner.addAssignedProjectAsPO(project);
            em.merge(productOwner);

            //Update assigned users
            List<User> assignees = project.getAssignedUsers();
            for (User assignee : assignees) {
                assignee.addAssignedProject(project);
                em.merge(assignee);
            }

            //Commit.
            em.getTransaction().commit();
        } catch (Exception ex) {
            project = null;
            Logger.getLogger(ProjectController.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return project;
    }

    /**
     * Destroy the project.
     *
     * @param project Project to destroy.
     * @return True if the deletion was successfuly executed.
     *
     * Project having Backlog items, Releases, Sprints cannot be deleted.
     */
    public boolean destroy(Project project) {
        EntityManager em = null;
        boolean success = true;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            project = em.getReference(Project.class, project.getId());

            //Updating user assignment (SM, PO, Developers).
            User scrumMaster = project.getScrumMaster();
            scrumMaster.getAssignedProjectsAsSM().remove(project);
            em.merge(scrumMaster);

            User productOwner = project.getProductOwner();
            productOwner.getAssignedProjectsAsPO().remove(project);
            em.merge(productOwner);

            List<User> assignees = project.getAssignedUsers();
            for (User assignee : assignees) {
                assignee.getAssignedProjects().remove(project);
                em.merge(assignee);
            }
           
            //Deleting events related to the project.
            List<Event> events = project.getEvents();
            EventController eventController = new EventController();
            for(Event event : events){
                eventController.destroy(event);
            }

            //Deleting project.
            em.remove(em.merge(project));
            em.getTransaction().commit();
        } catch (Exception ex) {
            Logger.getLogger(ProjectController.class.getName()).log(Level.SEVERE, null, ex);
            success = false;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return success;
    }

    /**
     * List of all projects
     *
     * @return List of all projects
     */
    public List<Project> getProjects() {
        EntityManager em = null;
        List<Project> projects = null;
        try {
            em = getEntityManager();
            projects = em.createNamedQuery(("Projects.findAll")).getResultList();
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            projects = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return projects;
    }

    /**
     * Look for project by key name
     *
     * @param keyName Project key name
     * @return Project corresponding to the key name.
     */
    public Project getProjectByKeyName(String keyName) {
        EntityManager em = null;
        Project project = null;
        try {
            em = getEntityManager();
            project = (Project) em.createNamedQuery(("Projects.findByKeyName")).setParameter("keyName", keyName).getSingleResult();
        } catch (NoResultException ex) {
            project = null;
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            project = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return project;
    }

    /**
     * Refresh a project.
     *
     * @param project Project to refresh.
     * @return The project refreshed.
     */
    public Project refresh(Project project) {
        return getEntityManager().getReference(Project.class, project.getId());
    }
}
TOP

Related Classes of com.agilebooster.data.jpa.ProjectController

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.