From 261704fa478f1df1817c25c00aef883f85138480 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Tue, 8 Nov 2022 19:42:49 +0100 Subject: [PATCH] Importers/Exporters for relatation entities of SciDepartment --- .../contenttypes/scidepartment/Contact.java | 6 -- .../scidepartment/ContactImExporter.java | 68 +++++++++++++++++++ .../DepartmentProjectImExporter.java | 67 ++++++++++++++++++ .../scidepartment/MembershipImExporter.java | 60 ++++++++++++++++ 4 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactImExporter.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectImExporter.java create mode 100644 sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipImExporter.java diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Contact.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Contact.java index 733611e..0382582 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Contact.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Contact.java @@ -1,8 +1,6 @@ package org.scientificcms.contenttypes.scidepartment; -import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; import org.hibernate.envers.Audited; import org.libreccm.core.CcmObjects; import org.libreccm.imexport.Exportable; @@ -30,10 +28,6 @@ import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstant @Entity(name = "DepartmentContact") @Audited @Table(name = "DEPARTMENT_CONTACTS", schema = DB_SCHEMA) -@JsonIdentityInfo( - generator = ObjectIdGenerators.PropertyGenerator.class, - property = "uuid" -) public class Contact implements Exportable, Serializable { private static final long serialVersionUID = 1L; diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactImExporter.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactImExporter.java new file mode 100644 index 0000000..097ca80 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactImExporter.java @@ -0,0 +1,68 @@ +package org.scientificcms.contenttypes.scidepartment; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Processes; +import org.librecms.assets.Organization; +import org.librecms.assets.Person; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; + +/** + * Exporter/Importer for {@link Contact} entities. + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(Contact.class) +public class ContactImExporter + extends AbstractEntityImExporter { + + @Inject + private ContactRepository contactRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciDepartment.class, + Organization.class, + Person.class + ) + ); + } + + @Override + public Class getEntityClass() { + return Contact.class; + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Contact entity) { + contactRepo.save(entity); + } + + @Override + protected Contact reloadEntity(final Contact entity) { + return contactRepo + .findById(entity.getContactId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Contact entity %s was not found in the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectImExporter.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectImExporter.java new file mode 100644 index 0000000..cca0250 --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectImExporter.java @@ -0,0 +1,67 @@ +package org.scientificcms.contenttypes.scidepartment; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Processes; +import org.scientificcms.contenttypes.sciproject.SciProject; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * Importer/Exporter for {@link DepartmentProject} entities. + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(DepartmentProject.class) +public class DepartmentProjectImExporter + extends AbstractEntityImExporter { + + @Inject + private DepartmentProjectRepository projectRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciDepartment.class, + SciProject.class + ) + ); + } + + @Override + public Class getEntityClass() { + return DepartmentProject.class; + } + + @Override + protected void saveImportedEntity( + final DepartmentProject departmentProject + ) { + projectRepo.save(departmentProject); + } + + @Override + protected DepartmentProject reloadEntity( + final DepartmentProject entity + ) { + return projectRepo + .findById(entity.getDepartmentProjectId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "The DepartmentProject entity %s was not found in " + + "the database.", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipImExporter.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipImExporter.java new file mode 100644 index 0000000..83e0c6e --- /dev/null +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipImExporter.java @@ -0,0 +1,60 @@ +package org.scientificcms.contenttypes.scidepartment; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.librecms.assets.Person; + +import java.util.Objects; +import java.util.Set; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * Importer/Exporter for {@link Membership} entities. + * + * @author Jens Pelzetter + */ +public class MembershipImExporter + extends AbstractEntityImExporter { + + @Inject + private MembershipRepository membershipRepo; + + @PostConstruct + @Override + protected void init() { + addRequiredEntities( + Set.of( + SciDepartment.class, + Person.class + ) + ); + } + + @Override + public Class getEntityClass() { + return Membership.class; + } + + @Override + @Transactional(Transactional.TxType.REQUIRED) + protected void saveImportedEntity(final Membership entity) { + membershipRepo.save(entity); + } + + @Override + protected Membership reloadEntity(final Membership entity) { + return membershipRepo + .findById(entity.getMembershipId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "Membership entity %s was not found in the database.", + Objects.toString(entity) + ) + ) + ); + } + +}