From 439efa2e7309d77679dece5a69f82f456ab1317c Mon Sep 17 00:00:00 2001 From: tosmers Date: Tue, 12 Dec 2017 18:04:27 +0000 Subject: [PATCH] [NG][FEATURE] - adds capability to import assignable tasks - adds IdGenerator and Marshaller for TaskDependency - import of TaskDependencies not working yet git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5166 8810af33-2d31-482b-a856-94f89814c4df --- .../org/libreccm/l10n/LocalizedString.java | 16 +-- .../portation/AbstractMarshaller.java | 2 - .../main/java/org/libreccm/workflow/Task.java | 109 +++++------------- .../org/libreccm/workflow/TaskDependency.java | 6 +- .../workflow/TaskDependencyIdGenerator.java | 69 +++++++++++ .../workflow/TaskDependencyMarshaller.java | 54 +++++++++ .../portation/CoreDataImportTest.java | 1 + .../org/libreccm/portation/ImportHelper.java | 19 ++- 8 files changed, 184 insertions(+), 92 deletions(-) create mode 100644 ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyIdGenerator.java create mode 100644 ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyMarshaller.java diff --git a/ccm-core/src/main/java/org/libreccm/l10n/LocalizedString.java b/ccm-core/src/main/java/org/libreccm/l10n/LocalizedString.java index 9be47827c..a7f5a0de6 100644 --- a/ccm-core/src/main/java/org/libreccm/l10n/LocalizedString.java +++ b/ccm-core/src/main/java/org/libreccm/l10n/LocalizedString.java @@ -18,20 +18,23 @@ */ package org.libreccm.l10n; -import static org.libreccm.l10n.L10NConstants.*; - import com.fasterxml.jackson.annotation.JsonIgnore; import org.hibernate.annotations.Type; import org.hibernate.search.annotations.Field; import org.libreccm.l10n.jaxb.LocalizedStringValuesAdapter; +import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Embeddable; import javax.persistence.FetchType; import javax.persistence.Lob; import javax.persistence.MapKeyColumn; - +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.Serializable; import java.util.Collections; import java.util.HashMap; @@ -40,11 +43,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import static org.libreccm.l10n.L10NConstants.L10N_XML_NS; /** * A helper class for localisable string properties. This class is declared as @@ -67,6 +66,7 @@ public class LocalizedString implements Serializable { @ElementCollection(fetch = FetchType.EAGER) @MapKeyColumn(name = "LOCALE") @Column(name = "LOCALIZED_VALUE") + @Basic @Lob @Type(type = "org.hibernate.type.TextType") @Field diff --git a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java index 49c7a7e81..3543eb68c 100644 --- a/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java +++ b/ccm-core/src/main/java/org/libreccm/portation/AbstractMarshaller.java @@ -18,12 +18,10 @@ */ package org.libreccm.portation; -import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/ccm-core/src/main/java/org/libreccm/workflow/Task.java b/ccm-core/src/main/java/org/libreccm/workflow/Task.java index 127e1ff2e..6ba16680b 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/Task.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/Task.java @@ -20,6 +20,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; import org.libreccm.core.Identifiable; @@ -188,34 +189,25 @@ public class Task implements Identifiable, Serializable { @JsonIdentityReference(alwaysAsId = true) private Workflow workflow; -// /** -// * Tasks which depend on this task. -// */ -// @ManyToMany(mappedBy = "dependsOn", fetch = FetchType.LAZY) -// @JsonIgnore -// private List dependentTasks; + /** + * Tasks which depend on this task. + */ @OneToMany(mappedBy = "blockingTask", fetch = FetchType.LAZY) @XmlElementWrapper(name = "blocked-tasks") @XmlElement(name = "task-dependency") + @JsonIgnore private List blockedTasks; + /** + * The dependencies of this task. + */ @OneToMany(mappedBy = "blockedTask", fetch = FetchType.LAZY) @XmlElementWrapper(name = "blocking-tasks") @XmlElement(name = "task-dependency") + @JsonIgnore private List blockingTasks; -// /** -// * The dependencies of this task. -// */ -// @ManyToMany(fetch = FetchType.LAZY) -// @JoinTable(name = "WORKFLOW_TASK_DEPENDENCIES", -// schema = DB_SCHEMA, -// joinColumns = { -// @JoinColumn(name = "DEPENDS_ON_TASK_ID")}, -// inverseJoinColumns = { -// @JoinColumn(name = "DEPENDENT_TASK_ID")}) -// @JsonIdentityReference(alwaysAsId = true) -// private List dependsOn; + /** * Comments for the task. */ @@ -229,8 +221,6 @@ public class Task implements Identifiable, Serializable { label = new LocalizedString(); description = new LocalizedString(); -// dependentTasks = new ArrayList<>(); -// dependsOn = new ArrayList<>(); blockedTasks = new ArrayList<>(); blockingTasks = new ArrayList<>(); comments = new ArrayList<>(); @@ -296,65 +286,6 @@ public class Task implements Identifiable, Serializable { this.workflow = workflow; } -// public List getDependentTasks() { -// if (dependentTasks == null) { -// return null; -// } else { -// return Collections.unmodifiableList(dependentTasks); -// } -// } -// -// protected void setDependentTasks(final List dependentTasks) { -// this.dependentTasks = dependentTasks; -// } -// -// protected void addDependentTask(final Task task) { -// dependentTasks.add(task); -// } -// -// protected void removeDependentTask(final Task task) { -// dependentTasks.remove(task); -// } -// -// public List getDependsOn() { -// if (dependsOn == null) { -// return null; -// } else { -// return Collections.unmodifiableList(dependsOn); -// } -// } -// -// protected void setDependsOn(final List dependsOn) { -// this.dependsOn = dependsOn; -// } -// -// protected void addDependsOn(final Task task) { -// dependsOn.add(task); -// } -// -// protected void removeDependsOn(final Task task) { -// dependsOn.remove(task); -// } - public List getBlockingTasks() { - if (blockingTasks == null) { - return null; - } else { - return Collections.unmodifiableList(blockingTasks); - } - } - - protected void setBlockingTasks(final List blockingTasks) { - this.blockingTasks = blockingTasks; - } - - protected void addBlockingTask(final TaskDependency taskDependency) { - blockingTasks.add(taskDependency); - } - - protected void removeBlockingTask(final TaskDependency taskDependency) { - blockingTasks.remove(taskDependency); - } - public List getBlockedTasks() { if (blockedTasks == null) { return null; @@ -375,6 +306,26 @@ public class Task implements Identifiable, Serializable { blockedTasks.remove(taskDependency); } + public List getBlockingTasks() { + if (blockingTasks == null) { + return null; + } else { + return Collections.unmodifiableList(blockingTasks); + } + } + + protected void setBlockingTasks(final List blockingTasks) { + this.blockingTasks = blockingTasks; + } + + protected void addBlockingTask(final TaskDependency taskDependency) { + blockingTasks.add(taskDependency); + } + + protected void removeBlockingTask(final TaskDependency taskDependency) { + blockingTasks.remove(taskDependency); + } + public List getComments() { if (comments == null) { return null; diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependency.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependency.java index 4ff2281d2..46760fc18 100644 --- a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependency.java +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependency.java @@ -18,8 +18,10 @@ */ package org.libreccm.workflow; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIdentityReference; import org.libreccm.core.CoreConstants; +import org.libreccm.portation.Portable; import java.io.Serializable; import java.util.Objects; @@ -39,7 +41,9 @@ import javax.persistence.Table; */ @Entity @Table(name = "WORKFLOW_TASK_DEPENDENCIES", schema = CoreConstants.DB_SCHEMA) -public class TaskDependency implements Serializable { +@JsonIdentityInfo(generator = TaskDependencyIdGenerator.class, + property = "customDepId") +public class TaskDependency implements Serializable, Portable { private static final long serialVersionUID = -4383255770131633943L; diff --git a/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyIdGenerator.java b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyIdGenerator.java new file mode 100644 index 000000000..3a610fb1e --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/workflow/TaskDependencyIdGenerator.java @@ -0,0 +1,69 @@ +/* + * 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; + +/** + * @author