Advertisement
o0OBlackCatO0o

StudentController

Jun 18th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.62 KB | None | 0 0
  1. package swingschooljpa.logic.controllers;
  2.  
  3. import hu.elte.inf.prt.db.jpa.controllers.EntityController;
  4. import java.io.Serializable;
  5. import java.sql.SQLException;
  6. import javax.persistence.Query;
  7. import javax.persistence.EntityNotFoundException;
  8. import javax.persistence.criteria.CriteriaQuery;
  9. import javax.persistence.criteria.Root;
  10. import swingschooljpa.logic.entities.Groupp;
  11. import swingschooljpa.logic.entities.Mark;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. import javax.persistence.EntityManager;
  15. import javax.persistence.EntityManagerFactory;
  16. import swingschooljpa.logic.DataSource;
  17. import hu.elte.inf.prt.db.jpa.controllers.exceptions.NonexistentEntityException;
  18. import swingschooljpa.logic.entities.Student;
  19.  
  20. public class StudentController implements Serializable, EntityController<Student> {
  21.  
  22.     public StudentController(EntityManagerFactory emf) {
  23.         this.emf = emf;
  24.     }
  25.     private EntityManagerFactory emf = null;
  26.  
  27.     public EntityManager getEntityManager() {
  28.         return emf.createEntityManager();
  29.     }
  30.  
  31.     public void create(Student student) {
  32.         if (student.getMarks() == null) {
  33.             student.setMarks(new ArrayList<Mark>());
  34.         }
  35.         EntityManager em = null;
  36.         try {
  37.             em = getEntityManager();
  38.             em.getTransaction().begin();
  39.             Groupp groupp = student.getGroupp();
  40.             if (groupp != null) {
  41.                 groupp = em.getReference(groupp.getClass(), groupp.getId());
  42.                 student.setGroupp(groupp);
  43.             }
  44.             List<Mark> attachedMarks = new ArrayList<Mark>();
  45.             for (Mark marksMarkToAttach : student.getMarks()) {
  46.                 marksMarkToAttach = em.getReference(marksMarkToAttach.getClass(), marksMarkToAttach.getId());
  47.                 attachedMarks.add(marksMarkToAttach);
  48.             }
  49.             student.setMarks(attachedMarks);
  50.             em.persist(student);
  51.            
  52.             if (groupp != null) {
  53.                 groupp.getStudents().add(student);
  54.                 groupp = em.merge(groupp);
  55.             }
  56.             for (Mark marksMark : student.getMarks()) {
  57.                 Student oldStudentOfMarksMark = marksMark.getStudent();
  58.                 marksMark.setStudent(student);
  59.                 marksMark = em.merge(marksMark);
  60.                 if (oldStudentOfMarksMark != null) {
  61.                     oldStudentOfMarksMark.getMarks().remove(marksMark);
  62.                     oldStudentOfMarksMark = em.merge(oldStudentOfMarksMark);
  63.                 }
  64.             }
  65.             em.getTransaction().commit();
  66.         } finally {
  67.             if (em != null) {
  68.                 em.close();
  69.             }
  70.         }
  71.     }
  72.  
  73.     public void edit(Student student) throws NonexistentEntityException, Exception {
  74.         EntityManager em = null;
  75.         try {
  76.             em = getEntityManager();
  77.             em.getTransaction().begin();
  78.             Student persistentStudent = em.find(Student.class, student.getId());
  79.             Groupp grouppOld = persistentStudent.getGroupp();
  80.             Groupp grouppNew = student.getGroupp();
  81.             List<Mark> marksOld = persistentStudent.getMarks();
  82.             List<Mark> marksNew = student.getMarks();
  83.             if (grouppNew != null) {
  84.                 grouppNew = em.getReference(grouppNew.getClass(), grouppNew.getId());
  85.                 student.setGroupp(grouppNew);
  86.             }
  87.             List<Mark> attachedMarksNew = new ArrayList<Mark>();
  88.             for (Mark marksNewMarkToAttach : marksNew) {
  89.                 marksNewMarkToAttach = em.getReference(marksNewMarkToAttach.getClass(), marksNewMarkToAttach.getId());
  90.                 attachedMarksNew.add(marksNewMarkToAttach);
  91.             }
  92.             marksNew = attachedMarksNew;
  93.             student.setMarks(marksNew);
  94.             student = em.merge(student);
  95.             if (grouppOld != null && !grouppOld.equals(grouppNew)) {
  96.                 grouppOld.getStudents().remove(student);
  97.                 grouppOld = em.merge(grouppOld);
  98.             }
  99.             if (grouppNew != null && !grouppNew.equals(grouppOld)) {
  100.                 grouppNew.getStudents().add(student);
  101.                 grouppNew = em.merge(grouppNew);
  102.             }
  103.             for (Mark marksOldMark : marksOld) {
  104.                 if (!marksNew.contains(marksOldMark)) {
  105.                     marksOldMark.setStudent(null);
  106.                     marksOldMark = em.merge(marksOldMark);
  107.                 }
  108.             }
  109.             for (Mark marksNewMark : marksNew) {
  110.                 if (!marksOld.contains(marksNewMark)) {
  111.                     Student oldStudentOfMarksNewMark = marksNewMark.getStudent();
  112.                     marksNewMark.setStudent(student);
  113.                     marksNewMark = em.merge(marksNewMark);
  114.                     if (oldStudentOfMarksNewMark != null && !oldStudentOfMarksNewMark.equals(student)) {
  115.                         oldStudentOfMarksNewMark.getMarks().remove(marksNewMark);
  116.                         oldStudentOfMarksNewMark = em.merge(oldStudentOfMarksNewMark);
  117.                     }
  118.                 }
  119.             }
  120.             em.getTransaction().commit();
  121.         } catch (Exception ex) {
  122.             String msg = ex.getLocalizedMessage();
  123.             if (msg == null || msg.length() == 0) {
  124.                 Integer id = student.getId();
  125.                 if (findStudent(id) == null) {
  126.                     throw new NonexistentEntityException("The student with id " + id + " no longer exists.");
  127.                 }
  128.             }
  129.             throw ex;
  130.         } finally {
  131.             if (em != null) {
  132.                 em.close();
  133.             }
  134.         }
  135.     }
  136.  
  137.     public void destroy(Integer id) throws NonexistentEntityException {
  138.         EntityManager em = null;
  139.         try {
  140.             em = getEntityManager();
  141.             em.getTransaction().begin();
  142.             Student student;
  143.             try {
  144.                 student = em.getReference(Student.class, id);
  145.                 student.getId();
  146.             } catch (EntityNotFoundException enfe) {
  147.                 throw new NonexistentEntityException("The student with id " + id + " no longer exists.", enfe);
  148.             }
  149.             Groupp groupp = student.getGroupp();
  150.             if (groupp != null) {
  151.                 groupp.getStudents().remove(student);
  152.                 groupp = em.merge(groupp);
  153.             }
  154.             List<Mark> marks = student.getMarks();
  155.             for (Mark marksMark : marks) {
  156.                 marksMark.setStudent(null);
  157.                 marksMark = em.merge(marksMark);
  158.             }
  159.             em.remove(student);
  160.             em.getTransaction().commit();
  161.         } finally {
  162.             if (em != null) {
  163.                 em.close();
  164.             }
  165.         }
  166.     }
  167.  
  168.     public List<Student> findStudentEntities() {
  169.         return findStudentEntities(true, -1, -1);
  170.     }
  171.  
  172.     public List<Student> findStudentEntities(int maxResults, int firstResult) {
  173.         return findStudentEntities(false, maxResults, firstResult);
  174.     }
  175.  
  176.     private List<Student> findStudentEntities(boolean all, int maxResults, int firstResult) {
  177.         EntityManager em = getEntityManager();
  178.         try {
  179.             CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
  180.             cq.select(cq.from(Student.class));
  181.             Query q = em.createQuery(cq);
  182.             if (!all) {
  183.                 q.setMaxResults(maxResults);
  184.                 q.setFirstResult(firstResult);
  185.             }
  186.             return q.getResultList();
  187.         } finally {
  188.             em.close();
  189.         }
  190.     }
  191.  
  192.     public Student findStudent(Integer id) {
  193.         EntityManager em = getEntityManager();
  194.         try {
  195.             return em.find(Student.class, id);
  196.         } finally {
  197.             em.close();
  198.         }
  199.     }
  200.  
  201.     public int getStudentCount() {
  202.         EntityManager em = getEntityManager();
  203.         try {
  204.             CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
  205.             Root<Student> rt = cq.from(Student.class);
  206.             cq.select(em.getCriteriaBuilder().count(rt));
  207.             Query q = em.createQuery(cq);
  208.             return ((Long) q.getSingleResult()).intValue();
  209.         } finally {
  210.             em.close();
  211.         }
  212.     }
  213.  
  214.     @Override
  215.     public Student getEntityById(int entityId) {
  216.         return findStudent(entityId);
  217.     }
  218.  
  219.     @Override
  220.     public Student getEntityByRowIndex(int rowIndex) {
  221.         return findStudentEntities(1, rowIndex).get(0);
  222.     }
  223.  
  224.     @Override
  225.     public int getEntityCount() {
  226.         return getStudentCount();
  227.     }
  228.  
  229.     @Override
  230.     public void updateEntity(Student entity) throws Exception {
  231.         edit(entity);
  232.     }
  233.  
  234. //    @Override
  235. //    public int addNewEntity() throws SQLException {
  236. //        if (DataSource.getInstance().getGrouppController().getEntityCount() == 0) {
  237. //            throw new SQLException("There are no groups yet.");
  238. //        }
  239. //        String firstName = "<first name>", lastName = "<last name>";
  240. //        Groupp groupp = DataSource.getInstance().getGrouppController().getEntityByRowIndex(0);
  241. //        Student student = new Student();
  242. //        student.setFirstName(firstName);
  243. //        student.setLastName(lastName);
  244. //        student.setGroupp(groupp);
  245. //        create(student);
  246. //        return getEntityCount() - 1;
  247. //    }
  248.  
  249.     @Override
  250.     public void deleteEntity(int rowIndex) throws NonexistentEntityException {
  251.         destroy(getEntityByRowIndex(rowIndex).getId());
  252.     }
  253.  
  254.     @Override
  255.     public List<Student> getEntities() {
  256.         return findStudentEntities();
  257.     }
  258.  
  259.     @Override
  260.     public void addEntity(Student entity) {
  261.         create(entity);
  262.     }
  263.  
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement