diff --git a/ccm-core/src/main/java/org/libreccm/security/Permission.java b/ccm-core/src/main/java/org/libreccm/security/Permission.java
index 73a62208f..7ab5d5ced 100644
--- a/ccm-core/src/main/java/org/libreccm/security/Permission.java
+++ b/ccm-core/src/main/java/org/libreccm/security/Permission.java
@@ -143,6 +143,7 @@ public class Permission implements Serializable, Portable {
@ManyToOne
@JoinColumn(name = "CREATION_USER_ID")
@XmlElement(name = "creation-user", namespace = CORE_XML_NS)
+ @JsonIdentityReference(alwaysAsId = true)
private User creationUser;
/**
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTask.java b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTask.java
index a7156e362..72188cac9 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTask.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTask.java
@@ -19,6 +19,7 @@
package org.libreccm.workflow;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.JsonIdentityReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.libreccm.portation.Portable;
@@ -100,6 +101,7 @@ public class AssignableTask extends Task implements Serializable, Portable {
*/
@OneToOne
@JoinColumn(name = "LOCKING_USER_ID")
+ @JsonIdentityReference(alwaysAsId = true)
private User lockingUser;
/**
@@ -128,6 +130,7 @@ public class AssignableTask extends Task implements Serializable, Portable {
@OneToOne
@JoinColumn(name = "NOTIFICATION_SENDER")
@SuppressWarnings("PMD.LongVariable") //Shorter name would not be descriptive
+ @JsonIdentityReference(alwaysAsId = true)
private User notificationSender;
/**
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskIdResolver.java b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskIdResolver.java
index ace033871..1b6dcbb3b 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskIdResolver.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskIdResolver.java
@@ -47,7 +47,7 @@ public class AssignableTaskIdResolver implements ObjectIdResolver {
return assignableTaskRepository
.findByUuid(id.key.toString())
.orElseThrow(() -> new IllegalArgumentException(String
- .format("No assignableTasks with uuid %s in the " +
+ .format("No assignable tasks with uuid %s in the " +
"database.", id.key.toString())));
}
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskRepository.java b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskRepository.java
index 30e1eb2e0..ee45c5d66 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/AssignableTaskRepository.java
@@ -36,8 +36,8 @@ import java.util.stream.Collectors;
* @author Jens Pelzetter
*/
@RequestScoped
-public class AssignableTaskRepository
- extends AbstractEntityRepository {
+public class AssignableTaskRepository extends AbstractEntityRepository {
@Override
public Class getEntityClass() {
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskComment.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskComment.java
index 922155169..50a0efb4e 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/TaskComment.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskComment.java
@@ -18,9 +18,12 @@
*/
package org.libreccm.workflow;
+import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.hibernate.annotations.Type;
import org.libreccm.core.CoreConstants;
import org.libreccm.core.Identifiable;
+import org.libreccm.portation.Portable;
import org.libreccm.security.User;
import javax.persistence.*;
@@ -36,7 +39,15 @@ import java.util.Objects;
*/
@Entity
@Table(name = "WORKFLOW_TASK_COMMENTS", schema = CoreConstants.DB_SCHEMA)
-public class TaskComment implements Identifiable, Serializable {
+@NamedQueries({
+ @NamedQuery(
+ name = "TaskComment.findByUuid",
+ query = "SELECT c FROM TaskComment c WHERE c.uuid = :uuid")
+})
+@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
+ resolver = TaskCommentIdResolver.class,
+ property = "uuid")
+public class TaskComment implements Identifiable, Serializable, Portable {
private static final long serialVersionUID = 3842991529698351698L;
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentIdResolver.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentIdResolver.java
new file mode 100644
index 000000000..6a9ea2330
--- /dev/null
+++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskCommentIdResolver.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2015 LibreCCM Foundation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+package org.libreccm.workflow;
+
+import com.fasterxml.jackson.annotation.ObjectIdGenerator;
+import com.fasterxml.jackson.annotation.ObjectIdResolver;
+import org.libreccm.cdi.utils.CdiUtil;
+
+/**
+ * @author Tobias Osmers<\a>
+ * @version created the 9/27/17
+ */
+@RequestScoped
+public class TaskCommentRepository extends AbstractEntityRepository {
+ @Override
+ public Class getEntityClass() {
+ return TaskComment.class;
+ }
+
+ @Override
+ public boolean isNew(TaskComment entity) {
+ return entity.getCommentId() == 0;
+ }
+
+ /**
+ * Finds a {@link TaskComment} by its uuid.
+ *
+ * @param uuid The uuid of the item to find
+ *
+ * @return An optional either with the found item or empty
+ */
+ public Optional findByUuid(final String uuid) {
+ final TypedQuery query = getEntityManager()
+ .createNamedQuery("TaskComment.findByUuid", TaskComment.class);
+ query.setParameter("uuid", uuid);
+
+ try {
+ return Optional.of(query.getSingleResult());
+ } catch (NoResultException ex) {
+ return Optional.empty();
+ }
+ }
+}
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/Workflow.java b/ccm-core/src/main/java/org/libreccm/workflow/Workflow.java
index 0518aaf86..b3477b209 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/Workflow.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/Workflow.java
@@ -19,6 +19,7 @@
package org.libreccm.workflow;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
+import com.fasterxml.jackson.annotation.JsonIdentityReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import org.libreccm.core.CcmObject;
@@ -48,12 +49,12 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
@NamedQueries({
@NamedQuery(
name = "Workflow.findByUuid",
- query = "SELECT W FROM Workflow w WHERE w.uuid = :uuid")
+ query = "SELECT w FROM Workflow w WHERE w.uuid = :uuid")
,
@NamedQuery(
name = "Workflow.findForObject",
query = "SELECT w FROM Workflow w "
- + "WHERE W.object = :object")
+ + "WHERE w.object = :object")
})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
resolver = WorkflowIdResolver.class,
@@ -82,6 +83,7 @@ public class Workflow implements Identifiable, Serializable, Portable {
*/
@ManyToOne
@JoinColumn(name = "TEMPLATE_ID")
+ @JsonIdentityReference(alwaysAsId = true)
private WorkflowTemplate template;
/**
@@ -136,6 +138,7 @@ public class Workflow implements Identifiable, Serializable, Portable {
*/
@OneToOne
@JoinColumn(name = "OBJECT_ID")
+ @JsonIdentityReference(alwaysAsId = true)
private CcmObject object;
/**
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplate.java b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplate.java
index 54616d6f7..cf905a8ee 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplate.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplate.java
@@ -43,7 +43,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
@NamedQueries({
@NamedQuery(
name = "WorkflowTemplate.findByUuid",
- query = "SELECT T FROM WorkflowTemplate t WHERE t.uuid = :uuid")
+ query = "SELECT t FROM WorkflowTemplate t " +
+ "WHERE t.uuid = :uuid")
})
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
resolver = WorkflowTemplateIdResolver.class,
diff --git a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateIdResolver.java b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateIdResolver.java
index 572396af4..3c95223ac 100644
--- a/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateIdResolver.java
+++ b/ccm-core/src/main/java/org/libreccm/workflow/WorkflowTemplateIdResolver.java
@@ -38,16 +38,16 @@ public class WorkflowTemplateIdResolver implements ObjectIdResolver {
}
@Override
- public Object resolveId(ObjectIdGenerator.IdKey idKey) {
+ public Object resolveId(ObjectIdGenerator.IdKey id) {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final WorkflowTemplateRepository workflowTemplateRepository = cdiUtil
.findBean(WorkflowTemplateRepository.class);
return workflowTemplateRepository
- .findByUuid(idKey.toString())
+ .findByUuid(id.key.toString())
.orElseThrow(() -> new IllegalArgumentException(String
.format("No workflow templates with uuid %s in the " +
- "database.", idKey.toString())));
+ "database.", id.key.toString())));
}
@Override
diff --git a/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java b/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java
index 4c0eade0b..caef187a8 100644
--- a/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java
+++ b/ccm-core/src/test/java/org/libreccm/portation/CoreDataImportTest.java
@@ -127,24 +127,14 @@ public class CoreDataImportTest {
@Test
@InSequence(100)
- public void objectsShouldBeImported() throws InterruptedException {
+ public void objectsShouldBeImported() {
// assert for no errors
Assert.assertFalse(importHelper.importUsers());
Assert.assertFalse(importHelper.importGroups());
Assert.assertFalse(importHelper.importGroupMemberships());
-
Assert.assertFalse(importHelper.importRoles());
Assert.assertFalse(importHelper.importRoleMemberships());
-
- /*final String name = "research_Administration_Publisher";
- Group group = groupRepository
- .findByName(name)
- .orElseThrow(() -> new IllegalArgumentException(String
- .format("No Group fount with the name: %s", name)));
- System.err.println(group.toString());*/
-
-
Assert.assertFalse(importHelper.importCategories());
Assert.assertFalse(importHelper.importCategorizations());
Assert.assertFalse(importHelper.importResourceTypes());
@@ -155,9 +145,10 @@ public class CoreDataImportTest {
Assert.assertFalse(importHelper.importPermissions());
Assert.assertFalse(importHelper.importWorkflowTemplates());
- //Assert.assertFalse(importHelper.importWorkflows());
-
-
+ Assert.assertFalse(importHelper.importWorkflows());
+ Assert.assertFalse(importHelper.importTaskComments());
+ //Assert.assertFalse(importHelper.importAssignableTasks());
+ //Assert.assertFalse(importHelper.importTaskAssignments());
}
}
diff --git a/ccm-core/src/test/java/org/libreccm/portation/ImportHelper.java b/ccm-core/src/test/java/org/libreccm/portation/ImportHelper.java
index 3d5e50e78..1a3ac087a 100644
--- a/ccm-core/src/test/java/org/libreccm/portation/ImportHelper.java
+++ b/ccm-core/src/test/java/org/libreccm/portation/ImportHelper.java
@@ -79,6 +79,10 @@ class ImportHelper {
@Marshals(DomainOwnership.class)
private DomainOwnershipMarshaller domainOwnershipMarshaller;
+ @Inject
+ @Marshals(Permission.class)
+ private PermissionMarshaller permissionMarshaller;
+
@Inject
@Marshals(WorkflowTemplate.class)
private WorkflowTemplateMarshaller workflowTemplateMarshaller;
@@ -86,15 +90,15 @@ class ImportHelper {
@Marshals(Workflow.class)
private WorkflowMarshaller workflowMarshaller;
@Inject
+ @Marshals(TaskComment.class)
+ private TaskCommentMarshaller taskCommentMarshaller;
+ @Inject
@Marshals(AssignableTask.class)
private AssignableTaskMarshaller assignableTaskMarshaller;
@Inject
@Marshals(TaskAssignment.class)
private TaskAssignmentMarshaller taskAssignmentMarshaller;
- @Inject
- @Marshals(Permission.class)
- private PermissionMarshaller permissionMarshaller;
boolean importUsers() {
@@ -223,6 +227,15 @@ class ImportHelper {
return workflowMarshaller.importFile();
}
+ boolean importTaskComments() {
+ taskCommentMarshaller.prepare(
+ Format.XML,
+ repoPath + projectPath,
+ "taskComments.xml",
+ indentation);
+ return taskCommentMarshaller.importFile();
+ }
+
boolean importAssignableTasks() {
assignableTaskMarshaller.prepare(
Format.XML,