InstanceMakerDao.java

  1. /*
  2.  * The coLAB project
  3.  * Copyright (C) 2022-2023 AlbaSim, MEI, HEIG-VD, HES-SO
  4.  *
  5.  * Licensed under the MIT License
  6.  */
  7. package ch.colabproject.colab.api.persistence.jpa.project;

  8. import ch.colabproject.colab.api.model.project.InstanceMaker;
  9. import ch.colabproject.colab.api.model.project.Project;
  10. import ch.colabproject.colab.api.model.user.User;

  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;

  13. import javax.ejb.LocalBean;
  14. import javax.ejb.Stateless;
  15. import javax.persistence.EntityManager;
  16. import javax.persistence.NoResultException;
  17. import javax.persistence.PersistenceContext;
  18. import javax.persistence.TypedQuery;

  19. /**
  20.  * Instance maker persistence
  21.  * <p>
  22.  * Note : Most database operations are handled by managed entities and cascade.
  23.  *
  24.  * @author sandra
  25.  */
  26. @Stateless
  27. @LocalBean
  28. public class InstanceMakerDao {

  29.     /**
  30.      * logger
  31.      */
  32.     private static final Logger logger = LoggerFactory.getLogger(InstanceMakerDao.class);

  33.     /**
  34.      * Access to the persistence unit
  35.      */
  36.     @PersistenceContext(unitName = "COLAB_PU")
  37.     private EntityManager em;

  38.     /**
  39.      * Find an instance maker by id
  40.      *
  41.      * @param id the id of the instance maker
  42.      * @return the instance maker or null if it does not exist
  43.      */
  44.     public InstanceMaker findInstanceMaker(Long id) {
  45.         logger.trace("find instance maker #{}", id);

  46.         return em.find(InstanceMaker.class, id);
  47.     }

  48.     /**
  49.      * Find the instance maker who match the given project and the given user.
  50.      *
  51.      * @param project the project
  52.      * @param user    the user
  53.      * @return the instance maker or null
  54.      */
  55.     public InstanceMaker findInstanceMakerByProjectAndUser(Project project, User user) {
  56.         try {
  57.             TypedQuery<InstanceMaker> query = em.createNamedQuery(
  58.                     "InstanceMaker.findByProjectAndUser",
  59.                     InstanceMaker.class);

  60.             query.setParameter("projectId", project.getId());
  61.             query.setParameter("userId", user.getId());

  62.             return query.getSingleResult();
  63.         } catch (NoResultException ex) {
  64.             return null;
  65.         }
  66.     }

  67. //    /**
  68. //     * Find the instance makers related to the given user
  69. //     *
  70. //     * @param user the user
  71. //     *
  72. //     * @return the matching instance makers
  73. //     */
  74. //    public List<InstanceMaker> findInstanceMakersByUser(User user) {
  75. //        TypedQuery<InstanceMaker> query = em.createNamedQuery("InstanceMaker.findByUser",
  76. //            InstanceMaker.class);
  77. //
  78. //        query.setParameter("userId", user.getId());
  79. //
  80. //        return query.getResultList();
  81. //    }

  82. //    /**
  83. //     * Update instance maker. Only fields which are editable by users will be impacted.
  84. //     *
  85. //     * @param instanceMaker the instance maker as supplied by clients (ie not managed by JPA)
  86. //     *
  87. //     * @return return updated managed instance maker
  88. //     *
  89. //     * @throws ColabMergeException if the update failed
  90. //     */
  91. //    public InstanceMaker updateInstanceMaker(InstanceMaker instanceMaker) throws ColabMergeException {
  92. //        logger.trace("update instance maker {}", instanceMaker);
  93. //
  94. //        InstanceMaker managedInstanceMaker = this.findInstanceMaker(instanceMaker.getId());
  95. //
  96. //        managedInstanceMaker.merge(instanceMaker);
  97. //
  98. //        return managedInstanceMaker;
  99. //    }

  100.     /**
  101.      * Persist a brand-new instance maker to database
  102.      *
  103.      * @param instanceMaker the new instance maker to persist
  104.      */
  105.     public void persistInstanceMaker(InstanceMaker instanceMaker) {
  106.         logger.trace("persist instance maker {}", instanceMaker);

  107.         em.persist(instanceMaker);

  108.     }

  109.     /**
  110.      * Delete the instance maker from database. This can't be undone
  111.      *
  112.      * @param instanceMaker the instance maker to delete
  113.      */
  114.     public void deleteInstanceMaker(InstanceMaker instanceMaker) {
  115.         logger.trace("delete instance maker #{}", instanceMaker);

  116.         // TODO: move to recycle bin first

  117.         em.remove(instanceMaker);
  118.     }

  119. }