Package com.agilebooster.data.jpa

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

/*
* (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.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 Users table.
*
* @author Maxime ESCOURBIAC
*/
public class UserController {

    private final EntityManagerFactory emf;

    /**
     * Default constructor.
     */
    public UserController() {
        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 user in database.
     *
     * @param user User to create.
     * @return User created with id value returned.
     *
     * The user creation process has been simplified. The only case where this
     * method is called, the future user cannot have any interactions with
     * existant projects.
     */
    public User create(User user) {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(user);
            em.flush();
            em.getTransaction().commit();
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            user = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return user;
    }

    /**
     * Edit the user in database.
     *
     * @param user User to edit.
     * @return User edited.
     *
     * The user edition process has been simplified. The only case where this
     * method is called, is during update user profile. For assignment stuff, it
     * will used the edit method of the concerned element.
     */
    public User edit(User user) {
        EntityManager em = null;
        User persistantUser;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            persistantUser = em.find(User.class, user.getId());
            persistantUser.setLastName(user.getLastName());
            persistantUser.setForename(user.getForename());
            persistantUser.setMail(user.getMail());
            persistantUser.setPassword(user.getPassword());
            persistantUser.setIsAdmin(user.isAdmin());
            persistantUser = em.merge(persistantUser);
            em.flush();
            em.getTransaction().commit();
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            persistantUser = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return persistantUser;
    }

    /**
     * Destroy the user.
     *
     * @param user User to destroy.
     * @return True if the deletion was sucessfuly executed.
     *
     * User having interactions with projects, backlog items etc... cannot be
     * deleted for tracability reasons. It should be disabled.
     */
    public boolean destroy(User user) {
        EntityManager em = null;
        boolean success = true;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            em.remove(em.merge(user));
            em.getTransaction().commit();
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            success = false;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return success;
    }

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

    /**
     * List of all administrators
     *
     * @return List of all administrators
     */
    public List<User> getAdmins() {
        EntityManager em = null;
        List<User> admins = null;
        try {
            em = getEntityManager();
            admins = em.createNamedQuery(("Users.findAdmins")).getResultList();
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            admins = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return admins;
    }

    /**
     * Look for user by mail
     *
     * @param mail User's mail
     * @return User corresponding to the mail.
     */
    public User getUserByMail(String mail) {
        EntityManager em = null;
        User user = null;
        try {
            em = getEntityManager();
            user = (User) em.createNamedQuery(("Users.findByMail")).setParameter("mail", mail).getSingleResult();
        } catch (NoResultException ex) {
            user = null;
        } catch (Exception ex) {
            Logger.getLogger(UserController.class.getName()).log(Level.SEVERE, null, ex);
            user = null;
        } finally {
            if (em != null) {
                em.close();
            }
        }
        return user;
    }

    /**
     * Refresh an user.
     *
     * @param user User to refresh.
     * @return The user refreshed.
     */
    public User refresh(User user) {
        return getEntityManager().getReference(User.class, user.getId());
    }
}
TOP

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

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.