public void create(Tema tema) throws PreexistingEntityException, Exception { if (tema.getNormatividadList() == null) { tema.setNormatividadList(new ArrayList<Normatividad>()); } if (tema.getProcesoList() == null) { tema.setProcesoList(new ArrayList<Proceso>()); } EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Clase idAreaDerecho = tema.getIdAreaDerecho(); if (idAreaDerecho != null) { idAreaDerecho = em.getReference(idAreaDerecho.getClass(), idAreaDerecho.getId()); tema.setIdAreaDerecho(idAreaDerecho); } List<Normatividad> attachedNormatividadList = new ArrayList<Normatividad>(); for (Normatividad normatividadListNormatividadToAttach : tema.getNormatividadList()) { normatividadListNormatividadToAttach = em.getReference( normatividadListNormatividadToAttach.getClass(), normatividadListNormatividadToAttach.getId()); attachedNormatividadList.add(normatividadListNormatividadToAttach); } tema.setNormatividadList(attachedNormatividadList); List<Proceso> attachedProcesoList = new ArrayList<Proceso>(); for (Proceso procesoListProcesoToAttach : tema.getProcesoList()) { procesoListProcesoToAttach = em.getReference( procesoListProcesoToAttach.getClass(), procesoListProcesoToAttach.getId()); attachedProcesoList.add(procesoListProcesoToAttach); } tema.setProcesoList(attachedProcesoList); em.persist(tema); if (idAreaDerecho != null) { idAreaDerecho.getTemaList().add(tema); idAreaDerecho = em.merge(idAreaDerecho); } for (Normatividad normatividadListNormatividad : tema.getNormatividadList()) { Tema oldIdTemaOfNormatividadListNormatividad = normatividadListNormatividad.getIdTema(); normatividadListNormatividad.setIdTema(tema); normatividadListNormatividad = em.merge(normatividadListNormatividad); if (oldIdTemaOfNormatividadListNormatividad != null) { oldIdTemaOfNormatividadListNormatividad .getNormatividadList() .remove(normatividadListNormatividad); oldIdTemaOfNormatividadListNormatividad = em.merge(oldIdTemaOfNormatividadListNormatividad); } } for (Proceso procesoListProceso : tema.getProcesoList()) { Tema oldIdTemaOfProcesoListProceso = procesoListProceso.getIdTema(); procesoListProceso.setIdTema(tema); procesoListProceso = em.merge(procesoListProceso); if (oldIdTemaOfProcesoListProceso != null) { oldIdTemaOfProcesoListProceso.getProcesoList().remove(procesoListProceso); oldIdTemaOfProcesoListProceso = em.merge(oldIdTemaOfProcesoListProceso); } } em.getTransaction().commit(); } catch (Exception ex) { if (findTema(tema.getId()) != null) { throw new PreexistingEntityException("Tema " + tema + " already exists.", ex); } throw ex; } finally { if (em != null) { em.close(); } } }
public void edit(Tema tema) throws NonexistentEntityException, Exception { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); Tema persistentTema = em.find(Tema.class, tema.getId()); Clase idAreaDerechoOld = persistentTema.getIdAreaDerecho(); Clase idAreaDerechoNew = tema.getIdAreaDerecho(); List<Normatividad> normatividadListOld = persistentTema.getNormatividadList(); List<Normatividad> normatividadListNew = tema.getNormatividadList(); List<Proceso> procesoListOld = persistentTema.getProcesoList(); List<Proceso> procesoListNew = tema.getProcesoList(); if (idAreaDerechoNew != null) { idAreaDerechoNew = em.getReference(idAreaDerechoNew.getClass(), idAreaDerechoNew.getId()); tema.setIdAreaDerecho(idAreaDerechoNew); } List<Normatividad> attachedNormatividadListNew = new ArrayList<Normatividad>(); for (Normatividad normatividadListNewNormatividadToAttach : normatividadListNew) { normatividadListNewNormatividadToAttach = em.getReference( normatividadListNewNormatividadToAttach.getClass(), normatividadListNewNormatividadToAttach.getId()); attachedNormatividadListNew.add(normatividadListNewNormatividadToAttach); } normatividadListNew = attachedNormatividadListNew; tema.setNormatividadList(normatividadListNew); List<Proceso> attachedProcesoListNew = new ArrayList<Proceso>(); for (Proceso procesoListNewProcesoToAttach : procesoListNew) { procesoListNewProcesoToAttach = em.getReference( procesoListNewProcesoToAttach.getClass(), procesoListNewProcesoToAttach.getId()); attachedProcesoListNew.add(procesoListNewProcesoToAttach); } procesoListNew = attachedProcesoListNew; tema.setProcesoList(procesoListNew); tema = em.merge(tema); if (idAreaDerechoOld != null && !idAreaDerechoOld.equals(idAreaDerechoNew)) { idAreaDerechoOld.getTemaList().remove(tema); idAreaDerechoOld = em.merge(idAreaDerechoOld); } if (idAreaDerechoNew != null && !idAreaDerechoNew.equals(idAreaDerechoOld)) { idAreaDerechoNew.getTemaList().add(tema); idAreaDerechoNew = em.merge(idAreaDerechoNew); } for (Normatividad normatividadListOldNormatividad : normatividadListOld) { if (!normatividadListNew.contains(normatividadListOldNormatividad)) { normatividadListOldNormatividad.setIdTema(null); normatividadListOldNormatividad = em.merge(normatividadListOldNormatividad); } } for (Normatividad normatividadListNewNormatividad : normatividadListNew) { if (!normatividadListOld.contains(normatividadListNewNormatividad)) { Tema oldIdTemaOfNormatividadListNewNormatividad = normatividadListNewNormatividad.getIdTema(); normatividadListNewNormatividad.setIdTema(tema); normatividadListNewNormatividad = em.merge(normatividadListNewNormatividad); if (oldIdTemaOfNormatividadListNewNormatividad != null && !oldIdTemaOfNormatividadListNewNormatividad.equals(tema)) { oldIdTemaOfNormatividadListNewNormatividad .getNormatividadList() .remove(normatividadListNewNormatividad); oldIdTemaOfNormatividadListNewNormatividad = em.merge(oldIdTemaOfNormatividadListNewNormatividad); } } } for (Proceso procesoListOldProceso : procesoListOld) { if (!procesoListNew.contains(procesoListOldProceso)) { procesoListOldProceso.setIdTema(null); procesoListOldProceso = em.merge(procesoListOldProceso); } } for (Proceso procesoListNewProceso : procesoListNew) { if (!procesoListOld.contains(procesoListNewProceso)) { Tema oldIdTemaOfProcesoListNewProceso = procesoListNewProceso.getIdTema(); procesoListNewProceso.setIdTema(tema); procesoListNewProceso = em.merge(procesoListNewProceso); if (oldIdTemaOfProcesoListNewProceso != null && !oldIdTemaOfProcesoListNewProceso.equals(tema)) { oldIdTemaOfProcesoListNewProceso.getProcesoList().remove(procesoListNewProceso); oldIdTemaOfProcesoListNewProceso = em.merge(oldIdTemaOfProcesoListNewProceso); } } } em.getTransaction().commit(); } catch (Exception ex) { String msg = ex.getLocalizedMessage(); if (msg == null || msg.length() == 0) { Integer id = tema.getId(); if (findTema(id) == null) { throw new NonexistentEntityException("The tema with id " + id + " no longer exists."); } } throw ex; } finally { if (em != null) { em.close(); } } }