diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java index 0b237e1..ce88444 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Contact.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.sciproject.SciProjectConstants.*; @@ -29,9 +31,15 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; * * @author Jens Pelzetter */ -@Entity(name = "ProjectContact") +@Entity(name = "SciProjectContact") @Audited @Table(name = "PROJECT_CONTACTS", schema = DB_SCHEMA) +@NamedQueries({ + @NamedQuery( + name = "SciProjectContact.findByUuid", + query = "SELECT c FROM SciProjectContact c WHERE c.uuid = :uuid" + ) +}) public class Contact implements Exportable, Serializable { private static final long serialVersionUID = 1L; diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java index 3af13cd..2f8c7e6 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactImExporter.java @@ -9,12 +9,12 @@ import org.librecms.assets.Person; import org.librecms.contentsection.ContentItemRepository; 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 Contact} entities. @@ -25,14 +25,14 @@ import javax.transaction.Transactional; @Processes(Contact.class) public class ContactImExporter extends AbstractEntityImExporter { - + private static final Logger LOGGER = LogManager.getLogger( ContactImExporter.class ); @Inject private ContactRepository contactRepo; - + @Inject private ContentItemRepository itemRepo; @@ -54,10 +54,34 @@ 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) { contactRepo.save(entity); } + + @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); + } @Override protected Contact reloadEntity(final Contact entity) { diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java index 77c637d..aaa4857 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/ContactRepository.java @@ -2,9 +2,12 @@ package org.scientificcms.contenttypes.sciproject; 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; /** * @@ -45,5 +48,19 @@ public class ContactRepository public void initNewEntity(final Contact contact) { contact.setUuid(UUID.randomUUID().toString()); } + + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery("SciProjectContact.findByUuid", Contact.class) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch(NoResultException ex) { + return Optional.empty(); + } + } } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java index 92c6e98..59e0c0f 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Membership.java @@ -20,6 +20,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.sciproject.SciProjectConstants.*; @@ -28,7 +30,7 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; * * @author Jens Pelzetter */ -@Entity(name = "PROJECT_MEMBERSHIP") +@Entity(name = "SciProjectMembership") @Audited @Table(name = "PROJECT_MEMBERSHIPS", schema = DB_SCHEMA) @JsonIdentityInfo( @@ -36,6 +38,12 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; property = "uuid", scope = Membership.class ) +@NamedQueries({ + @NamedQuery( + name = "SciProjectMembership.findByUuid", + query = "SELECT m FROM SciProjectMembership m WHERE m.uuid = :uuid" + ) +}) public class Membership implements Exportable, Serializable { private static final long serialVersionUID = 1L; diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java index 71f6981..18e4835 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipImExporter.java @@ -6,12 +6,12 @@ import org.librecms.assets.Person; import org.librecms.contentsection.ContentItemRepository; 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. @@ -25,7 +25,7 @@ public class MembershipImExporter @Inject private ContentItemRepository itemRepo; - + @Inject private MembershipRepository membershipRepo; @@ -46,11 +46,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-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipRepository.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipRepository.java index 87e9f70..956aad1 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipRepository.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/MembershipRepository.java @@ -2,7 +2,12 @@ package org.scientificcms.contenttypes.sciproject; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.Optional; + +import javax.ejb.TransactionAttribute; import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; /** * @@ -39,4 +44,21 @@ public class MembershipRepository return membership.getMembershipId() == 0; } + @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-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectImExporter.java index 15e22df..9bcaf09 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectImExporter.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SciProjectImExporter.java @@ -8,6 +8,8 @@ package org.scientificcms.contenttypes.sciproject; import org.libreccm.imexport.Processes; import org.librecms.contentsection.AbstractContentItemImExporter; +import java.util.Objects; + import javax.enterprise.context.RequestScoped; /** @@ -16,16 +18,77 @@ import javax.enterprise.context.RequestScoped; */ @RequestScoped @Processes(SciProject.class) -public class SciProjectImExporter extends AbstractContentItemImExporter{ +public class SciProjectImExporter + extends AbstractContentItemImExporter { @Override protected void initContentItemImExporter() { // Nothing } - + @Override public Class getEntityClass() { return SciProject.class; } - + + @Override + protected void updateExistingContentItem( + final SciProject existingContentItem, + final SciProject importedContentItem + ) { + if (!Objects.equals( + existingContentItem.getBegin(), + importedContentItem.getBegin() + )) { + existingContentItem.setBegin(importedContentItem.getBegin()); + } + + if (!Objects.equals( + existingContentItem.getEnd(), + importedContentItem.getEnd() + )) { + existingContentItem.setEnd(importedContentItem.getEnd()); + } + + if (!Objects.equals( + existingContentItem.getShortDescription(), + importedContentItem.getShortDescription() + )) { + syncLocalizedStrings( + importedContentItem.getShortDescription(), + existingContentItem.getShortDescription() + ); + } + + if (!Objects.equals( + existingContentItem.getDescription(), + importedContentItem.getDescription() + )) { + syncLocalizedStrings( + importedContentItem.getDescription(), + existingContentItem.getDescription() + ); + } + + if (!Objects.equals( + existingContentItem.getFunding(), + importedContentItem.getFunding() + )) { + syncLocalizedStrings( + importedContentItem.getFunding(), + existingContentItem.getFunding() + ); + } + + if (!Objects.equals( + existingContentItem.getFundingVolume(), + importedContentItem.getFundingVolume() + )) { + syncLocalizedStrings( + importedContentItem.getFundingVolume(), + existingContentItem.getFundingVolume() + ); + } + } + } diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java index 1abdc39..381afee 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/Sponsoring.java @@ -16,6 +16,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.sciproject.SciProjectConstants.*; @@ -27,6 +29,12 @@ import static org.scientificcms.contenttypes.sciproject.SciProjectConstants.*; @Entity @Audited @Table(name = "SPONSORING", schema = DB_SCHEMA) +@NamedQueries({ + @NamedQuery( + name = "Sponsoring.findByUuid", + query = "SELECT s FROM Sponsoring s WHERE s.uuid = :uuid" + ) +}) public class Sponsoring implements Exportable, Serializable { private static final long serialVersionUID = 1L; diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java index a734cfa..40a8725 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringImExporter.java @@ -5,12 +5,12 @@ import org.libreccm.imexport.Processes; import org.librecms.assets.Organization; 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. @@ -40,12 +40,33 @@ public class SponsoringImExporter public Class getEntityClass() { return Sponsoring.class; } + + @Override + protected Optional findExistingEntity(final String uuid) { + return sponsoringRepo.findByUuid(uuid); + } @Override - @Transactional(Transactional.TxType.REQUIRED) protected void saveImportedEntity(final Sponsoring entity) { sponsoringRepo.save(entity); } + + @Override + protected void updateExistingEntity( + final Sponsoring existingEntity, + final Sponsoring importedEntity + ) { + if (!Objects.equals( + existingEntity.getFundingCode(), + importedEntity.getFundingCode() + )) { + existingEntity.setFundingCode(importedEntity.getFundingCode()); + } + + if (existingEntity.getOrder() != importedEntity.getOrder()) { + existingEntity.setOrder(importedEntity.getOrder()); + } + } @Override protected Sponsoring reloadEntity(final Sponsoring entity) { diff --git a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringRepository.java b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringRepository.java index b1744d7..32f792b 100644 --- a/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringRepository.java +++ b/sci-types-project/src/main/java/org/scientificcms/contenttypes/sciproject/SponsoringRepository.java @@ -2,7 +2,11 @@ package org.scientificcms.contenttypes.sciproject; import org.libreccm.auditing.AbstractAuditedEntityRepository; +import java.util.Optional; + import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; +import javax.transaction.Transactional; /** * @@ -36,8 +40,22 @@ public class SponsoringRepository @Override public boolean isNew(final Sponsoring sponsoring) { - return sponsoring.getSponsoringId() == 0 - || sponsoring.getUuid() == null; + return sponsoring.getSponsoringId() == 0 + || sponsoring.getUuid() == null; + } + + @Transactional(Transactional.TxType.REQUIRED) + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery("Sponsoring.findByUuid", Sponsoring.class) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } } }