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 0382582..ccca835 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 @@ -17,6 +17,8 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; import javax.persistence.Table; import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstants.DB_SCHEMA; @@ -25,9 +27,15 @@ import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstant * * @author Jens Pelzetter */ -@Entity(name = "DepartmentContact") +@Entity(name = "SciDepartmentContact") @Audited @Table(name = "DEPARTMENT_CONTACTS", schema = DB_SCHEMA) +@NamedQueries({ + @NamedQuery( + name = "SciDepartmentContact.findByUuid", + query = "SELECT c FROM SciDepartmentContact c WHERE c.uuid = :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 index 4085837..35bf7e9 100644 --- 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 @@ -8,12 +8,12 @@ import org.librecms.assets.Organization; import org.librecms.assets.Person; import java.util.Objects; +import java.util.Optional; import java.util.Set; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; -import javax.transaction.Transactional; /** * Exporter/Importer for {@link Contact} entities. @@ -24,7 +24,7 @@ import javax.transaction.Transactional; @Processes(Contact.class) public class ContactImExporter extends AbstractEntityImExporter { - + private static final Logger LOGGER = LogManager.getLogger( ContactImExporter.class ); @@ -50,10 +50,14 @@ public class ContactImExporter } @Override - @Transactional(Transactional.TxType.REQUIRED) + protected Optional findExistingEntity(final String uuid) { + return contactRepo.findByUuid(uuid); + } + + @Override protected void saveImportedEntity(final Contact entity) { LOGGER.info( - "Saving {}: {}", + "Saving {}: {}", entity.getClass().getName(), Objects.toString(entity) ); @@ -74,4 +78,23 @@ public class ContactImExporter ); } + @Override + protected void updateExistingEntity( + final Contact existingEntity, + final Contact importedEntity + ) { + if (!Objects.equals( + existingEntity.getContactType(), + importedEntity.getContactType() + )) { + existingEntity.setContactType(importedEntity.getContactType()); + } + + if (existingEntity.getOrder() != importedEntity.getOrder()) { + existingEntity.setOrder(importedEntity.getOrder()); + } + + contactRepo.save(existingEntity); + } + } diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactRepository.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactRepository.java index 79341bf..0c9e3fa 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactRepository.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/ContactRepository.java @@ -2,9 +2,12 @@ package org.scientificcms.contenttypes.scidepartment; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.Optional; import java.util.UUID; import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; /** * @@ -46,4 +49,19 @@ public class ContactRepository contact.setUuid(UUID.randomUUID().toString()); } + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery("SciDepartmentContact.findByUuid", + Contact.class) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } + } + } diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProject.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProject.java index 07743b0..383bd4a 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProject.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProject.java @@ -17,6 +17,8 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; import javax.persistence.Table; import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstants.DB_SCHEMA; @@ -28,6 +30,12 @@ import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstant @Entity @Audited @Table(name = "DEPARTMENT_PROJECTS", schema = DB_SCHEMA) +@NamedQueries({ + @NamedQuery( + name = "DepartmentProject.findByUuid", + query = "SELECT p FROM DepartmentProject p WHERE p.uuid = :uuid" + ) +}) public class DepartmentProject implements Exportable, Serializable { private static final long serialVersionUID = 1L; 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 index 748ba59..9a781c1 100644 --- 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 @@ -5,12 +5,12 @@ import org.libreccm.imexport.Processes; import org.scientificcms.contenttypes.sciproject.SciProject; import java.util.Objects; +import java.util.Optional; import java.util.Set; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; -import javax.transaction.Transactional; /** * Importer/Exporter for {@link DepartmentProject} entities. @@ -42,13 +42,27 @@ public class DepartmentProjectImExporter } @Override - @Transactional(Transactional.TxType.REQUIRED) + protected Optional findExistingEntity( + final String uuid + ) { + return projectRepo.findByUuid(uuid); + } + + @Override protected void saveImportedEntity( final DepartmentProject departmentProject ) { projectRepo.save(departmentProject); } + @Override + protected void updateExistingEntity( + final DepartmentProject existingEntity, + final DepartmentProject importedEntity + ) { + // Nothing + } + @Override protected DepartmentProject reloadEntity( final DepartmentProject entity diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectRepository.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectRepository.java index 1d8b116..1de481a 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectRepository.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/DepartmentProjectRepository.java @@ -2,9 +2,12 @@ package org.scientificcms.contenttypes.scidepartment; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.Optional; import java.util.UUID; import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; /** * @@ -40,10 +43,27 @@ public class DepartmentProjectRepository public boolean isNew(final DepartmentProject project) { return project.getDepartmentProjectId() == 0; } - + @Override public void initNewEntity(final DepartmentProject project) { project.setUuid(UUID.randomUUID().toString()); } + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery( + "DepartmentProject.findByUuid", + DepartmentProject.class + ) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } + } + } diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Membership.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Membership.java index 6246b14..409a53a 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Membership.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/Membership.java @@ -21,6 +21,8 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; +import javax.persistence.NamedQueries; +import javax.persistence.NamedQuery; import javax.persistence.Table; import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstants.DB_SCHEMA; @@ -29,7 +31,7 @@ import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstant * * @author Jens Pelzetter */ -@Entity(name = "DepartmentMembership") +@Entity(name = "SciDepartmentMembership") @Audited @Table(name = "DEPARTMENT_MEMBERSHIPS", schema = DB_SCHEMA) @JsonIdentityInfo( @@ -37,6 +39,12 @@ import static org.scientificcms.contenttypes.scidepartment.SciDepartmentConstant property = "uuid", scope = Membership.class ) +@NamedQueries({ + @NamedQuery( + name = "SciDepartmentMembership.findByUuid", + query = "SELECT m FROM SciDepartmentMembership m WHERE m.uuid = :uuid" + ) +}) public class Membership implements Exportable, Serializable { private static final long serialVersionUID = 1L; 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 index 6f58431..be739dc 100644 --- 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 @@ -5,12 +5,12 @@ import org.libreccm.imexport.Processes; import org.librecms.assets.Person; import java.util.Objects; +import java.util.Optional; import java.util.Set; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; -import javax.transaction.Transactional; /** * Importer/Exporter for {@link Membership} entities. @@ -42,11 +42,34 @@ public class MembershipImExporter } @Override - @Transactional(Transactional.TxType.REQUIRED) + protected Optional findExistingEntity(final String uuid) { + return membershipRepo.findByUuid(uuid); + } + + @Override protected void saveImportedEntity(final Membership entity) { membershipRepo.save(entity); } + @Override + protected void updateExistingEntity( + final Membership existingEntity, + final Membership importedEntity + ) { + if (!Objects.equals( + existingEntity.getRole(), + importedEntity.getRole() + )) { + existingEntity.setRole(importedEntity.getRole()); + } + + if (existingEntity.getStatus() != importedEntity.getStatus()) { + existingEntity.setStatus(importedEntity.getStatus()); + } + + membershipRepo.save(existingEntity); + } + @Override protected Membership reloadEntity(final Membership entity) { return membershipRepo diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipRepository.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipRepository.java index 4b80f3b..7ae378e 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipRepository.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/MembershipRepository.java @@ -2,9 +2,12 @@ package org.scientificcms.contenttypes.scidepartment; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.Optional; import java.util.UUID; import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; /** * @@ -14,6 +17,8 @@ import javax.enterprise.context.RequestScoped; public class MembershipRepository extends AbstractAuditedEntityRepository { + private static final long serialVersionUID = 1L; + @Override public Long getEntityId(final Membership membership) { return membership.getMembershipId(); @@ -38,10 +43,27 @@ public class MembershipRepository public boolean isNew(final Membership membership) { return membership.getMembershipId() == 0; } - + @Override public void initNewEntity(final Membership membership) { membership.setUuid(UUID.randomUUID().toString()); } + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery( + "SciProjectMembership.findByUuid", + Membership.class + ) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } + } + } diff --git a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentImExporter.java b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentImExporter.java index 045de0c..749b111 100644 --- a/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentImExporter.java +++ b/sci-types-department/src/main/java/org/scientificcms/contenttypes/scidepartment/SciDepartmentImExporter.java @@ -3,6 +3,8 @@ package org.scientificcms.contenttypes.scidepartment; import org.libreccm.imexport.Processes; import org.librecms.contentsection.AbstractContentItemImExporter; +import java.util.Objects; + import javax.enterprise.context.RequestScoped; /** @@ -11,18 +13,53 @@ import javax.enterprise.context.RequestScoped; */ @RequestScoped @Processes(SciDepartment.class) -public class SciDepartmentImExporter - extends AbstractContentItemImExporter{ +public class SciDepartmentImExporter + extends AbstractContentItemImExporter { @Override protected void initContentItemImExporter() { // Nothing } - - + @Override public Class getEntityClass() { return SciDepartment.class; } - + + @Override + protected void updateExistingContentItem( + final SciDepartment existingContentItem, + final SciDepartment importedContentItem + ) { + if (!Objects.equals( + existingContentItem.getShortDescription(), + importedContentItem.getShortDescription() + )) { + syncLocalizedStrings( + importedContentItem.getShortDescription(), + existingContentItem.getShortDescription() + ); + } + + if (!Objects.equals( + existingContentItem.getDepartmentDescription(), + importedContentItem.getDepartmentDescription() + )) { + syncLocalizedStrings( + importedContentItem.getDepartmentDescription(), + existingContentItem.getDepartmentDescription() + ); + } + + if (!Objects.equals( + existingContentItem.getAddendum(), + importedContentItem.getAddendum() + )) { + syncLocalizedStrings( + importedContentItem.getAddendum(), + existingContentItem.getAddendum() + ); + } + } + }