Package com.agilebooster.data.jpa

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

/*
* (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.BacklogItem;
import com.agilebooster.data.entity.Project;
import com.agilebooster.data.entity.Release;
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.Persistence;

/**
* Controller class from Releases table.
*
* @author Maxime ESCOURBIAC
*/
public class ReleaseController {

    private final EntityManagerFactory emf;

    /**
     * Default constructor.
     */
    public ReleaseController() {
        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 release in database.
     *
     * @param release Release to create.
     * @return Release created with id value returned.
     *
     * Sprints and Backlog items are not taken in account because the release
     * creation process these two lists are empty.
     */
    public Release create(Release release) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();

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

            //Update Project.
            Project project = release.getProject();
            project.addRelease(release);
            em.merge(project);

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

    /**
     * Destroy the release.
     *
     * @param release Release to destroy.
     * @return True if the deletion was sucessfuly executed.
     *
     * If the release contained sprints the deletion will not be successful.
     */
    public boolean destroy(Release release) {
        EntityManager em = null;
        boolean success = true;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            release = em.getReference(Release.class, release.getId());

            //Updating project.
            Project project = release.getProject();
            if (project != null) {
                project.getReleases().remove(release);
                em.merge(project);
            }

            //Updating Backlog items
            List<BacklogItem> backlogItems = release.getBacklogItems();
            for (BacklogItem backlogItem : backlogItems) {
                backlogItem.setRelease(null);
                em.merge(backlogItem);
            }

            //Deleting release.
            em.remove(em.merge(release));
            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;
    }

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

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

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.