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()
+ );
+ }
+ }
+
}