- modifies managed/back references
- adds updated export data for import

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4472 8810af33-2d31-482b-a856-94f89814c4df
ccm-docs
tosmers 2016-12-12 18:43:27 +00:00
parent eab9004678
commit c762750b6d
18 changed files with 210 additions and 180 deletions

View File

@ -19,6 +19,7 @@
package org.libreccm.categorization; package org.libreccm.categorization;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObject;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
@ -84,7 +85,7 @@ public class Categorization implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "CATEGORY_ID") @JoinColumn(name = "CATEGORY_ID")
@JsonBackReference @JsonManagedReference(value = "categorization-category")
private Category category; private Category category;
/** /**
@ -92,7 +93,7 @@ public class Categorization implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "OBJECT_ID") @JoinColumn(name = "OBJECT_ID")
@JsonBackReference @JsonManagedReference(value = "categorization-object")
private CcmObject categorizedObject; private CcmObject categorizedObject;
/** /**

View File

@ -182,7 +182,7 @@ public class Category extends CcmObject implements InheritsPermissions,
*/ */
@OneToMany(mappedBy = "category") @OneToMany(mappedBy = "category")
@XmlElementWrapper(name = "objects", namespace = CAT_XML_NS) @XmlElementWrapper(name = "objects", namespace = CAT_XML_NS)
@JsonManagedReference @JsonBackReference(value = "categorization-category")
private List<Categorization> objects; private List<Categorization> objects;
/** /**
@ -191,7 +191,7 @@ public class Category extends CcmObject implements InheritsPermissions,
@OneToMany(mappedBy = "parentCategory") @OneToMany(mappedBy = "parentCategory")
@XmlElementWrapper(name = "subcategories", namespace = CAT_XML_NS) @XmlElementWrapper(name = "subcategories", namespace = CAT_XML_NS)
@XmlElement(name = "category") @XmlElement(name = "category")
@JsonManagedReference @JsonBackReference(value = "parentcategory-subcategory")
private List<Category> subCategories; private List<Category> subCategories;
/** /**
@ -200,7 +200,7 @@ public class Category extends CcmObject implements InheritsPermissions,
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "PARENT_CATEGORY_ID") @JoinColumn(name = "PARENT_CATEGORY_ID")
@JsonBackReference @JsonManagedReference(value = "parentcategory-subcategory")
private Category parentCategory; private Category parentCategory;
/** /**

View File

@ -18,12 +18,12 @@
*/ */
package org.libreccm.core; package org.libreccm.core;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.hibernate.envers.Audited; import org.hibernate.envers.Audited;
import org.libreccm.categorization.Categorization; import org.libreccm.categorization.Categorization;
import org.libreccm.categorization.Category; import org.libreccm.categorization.Category;
import org.libreccm.categorization.CategoryManager; import org.libreccm.categorization.CategoryManager;
import org.libreccm.portation.Portable;
import org.libreccm.security.Permission; import org.libreccm.security.Permission;
import javax.persistence.Column; import javax.persistence.Column;
@ -117,7 +117,7 @@ public class CcmObject implements Identifiable, Serializable {
@OneToMany(mappedBy = "object") @OneToMany(mappedBy = "object")
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS) @XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
@XmlElement(name = "permission", namespace = CORE_XML_NS) @XmlElement(name = "permission", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "permission-object")
private List<Permission> permissions; private List<Permission> permissions;
/** /**
@ -126,7 +126,7 @@ public class CcmObject implements Identifiable, Serializable {
@OneToMany(mappedBy = "categorizedObject") @OneToMany(mappedBy = "categorizedObject")
@XmlElementWrapper(name = "categories", namespace = CORE_XML_NS) @XmlElementWrapper(name = "categories", namespace = CORE_XML_NS)
@XmlElement(name = "category", namespace = CORE_XML_NS) @XmlElement(name = "category", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "categorization-object")
private List<Categorization> categories; private List<Categorization> categories;
public CcmObject() { public CcmObject() {

View File

@ -22,7 +22,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.apache.log4j.Logger; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
@ -43,7 +44,8 @@ import java.util.List;
*/ */
public abstract class AbstractMarshaller<P extends Portable> { public abstract class AbstractMarshaller<P extends Portable> {
private static final Logger log = Logger.getLogger(AbstractMarshaller.class); private static final Logger LOGGER = LogManager.getLogger(AbstractMarshaller
.class);
private Format format; private Format format;
private String filename; private String filename;
@ -73,11 +75,14 @@ public abstract class AbstractMarshaller<P extends Portable> {
JacksonXmlModule module = new JacksonXmlModule(); JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false); module.setDefaultUseWrapper(false);
xmlMapper = new XmlMapper(module); xmlMapper = new XmlMapper(module);
if (indentation) { if (indentation) {
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT); xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
} }
break; break;
default: default:
break; break;
} }
@ -117,8 +122,9 @@ public abstract class AbstractMarshaller<P extends Portable> {
try { try {
fileWriter = new FileWriter(file); fileWriter = new FileWriter(file);
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to open a fileWriter for the file" + LOGGER.error("Unable to open a fileWriter for the file" +
" with the name %s.", file.getName())); " with the name {}.", file.getName());
LOGGER.error(e);
} }
if (fileWriter != null) { if (fileWriter != null) {
for (P object : exportList) { for (P object : exportList) {
@ -128,11 +134,12 @@ public abstract class AbstractMarshaller<P extends Portable> {
case XML: case XML:
try { try {
line = xmlMapper.writeValueAsString(object); line = xmlMapper.writeValueAsString(object);
//log.info(line); //LOGGER.info(line);
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to write objetct " + LOGGER.error("Unable to write objetct " +
"of class %s as XML string with name %s.", "of class {} as XML string with name {}.",
object.getClass(), file.getName()), e); object.getClass(), file.getName());
LOGGER.error(e);
} }
break; break;
@ -144,16 +151,18 @@ public abstract class AbstractMarshaller<P extends Portable> {
fileWriter.write(line); fileWriter.write(line);
fileWriter.write(System.getProperty("line.separator")); fileWriter.write(System.getProperty("line.separator"));
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to write to file with" + LOGGER.error("Unable to write to file with" +
" the name %s.", file.getName())); " the name {}.", file.getName());
LOGGER.error(e);
} }
} }
} }
try { try {
fileWriter.close(); fileWriter.close();
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to close a fileWriter for the" + LOGGER.error("Unable to close a fileWriter for the" +
" file with the name %s.", file.getName())); " file with the name {}.", file.getName());
LOGGER.error(e);
} }
} }
} }
@ -173,8 +182,9 @@ public abstract class AbstractMarshaller<P extends Portable> {
try { try {
lines = Files.readAllLines(file.toPath()); lines = Files.readAllLines(file.toPath());
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to read lines of the file with " + LOGGER.error("Unable to read lines of the file with " +
"name %s.", file.getName())); "name {}.", file.getName());
LOGGER.error(e);
} }
List<P> objects = new ArrayList<>(); List<P> objects = new ArrayList<>();
@ -186,8 +196,9 @@ public abstract class AbstractMarshaller<P extends Portable> {
try { try {
object = xmlMapper.readValue(line, getObjectClass()); object = xmlMapper.readValue(line, getObjectClass());
} catch (IOException e) { } catch (IOException e) {
log.error(String.format("Unable to read objects " + LOGGER.error("Unable to read objects " +
"from XML line:\n \"%s\"", line), e); "from XML line:\n \"{}\"", line);
LOGGER.error(e);
} }
break; break;

View File

@ -111,7 +111,9 @@ public class Marshaller {
private <P extends Portable> void exportList(List<P> list, private <P extends Portable> void exportList(List<P> list,
Class<? extends P> type, Class<? extends P> type,
Format format, Format format,
String filename) { String filename)
throws IllegalArgumentException {
final Instance<AbstractMarshaller<? extends Portable>> final Instance<AbstractMarshaller<? extends Portable>>
marshallerInstance = marshallerInstances.select(new marshallerInstance = marshallerInstances.select(new
MarshalsLiteral(type)); MarshalsLiteral(type));
@ -153,8 +155,10 @@ public class Marshaller {
* @param format The import style * @param format The import style
* @param <P> The type of the current marshaller * @param <P> The type of the current marshaller
*/ */
public <P extends Portable> void importFiles( public <P extends Portable> void importFiles(List<String> filenames,
List<String> filenames, Format format) { Format format)
throws IllegalArgumentException {
for (String filename : filenames) { for (String filename : filenames) {
String[] splitFilename = filename.split("__"); String[] splitFilename = filename.split("__");
String className = String className =

View File

@ -18,18 +18,10 @@
*/ */
package org.libreccm.security; package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.DefaultEntityGraph; import org.libreccm.core.DefaultEntityGraph;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.NamedAttributeNode; import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph; import javax.persistence.NamedEntityGraph;
@ -42,6 +34,14 @@ import javax.persistence.Table;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* A group is basically a collection of users. * A group is basically a collection of users.
@ -101,7 +101,7 @@ public class Group extends Party implements Serializable, Portable {
@OneToMany(mappedBy = "group") @OneToMany(mappedBy = "group")
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "group-membership", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "groupmembership-group")
private Set<GroupMembership> memberships = new HashSet<>(); private Set<GroupMembership> memberships = new HashSet<>();
public Group() { public Group() {

View File

@ -19,13 +19,9 @@
package org.libreccm.security; package org.libreccm.security;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import static org.libreccm.core.CoreConstants.*;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
@ -39,6 +35,11 @@ import javax.persistence.Table;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlTransient;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* A association class representing the assoication between a {@link User} and * A association class representing the assoication between a {@link User} and
@ -66,13 +67,13 @@ public class GroupMembership implements Serializable, Portable {
@ManyToOne @ManyToOne
@JoinColumn(name = "GROUP_ID") @JoinColumn(name = "GROUP_ID")
@XmlTransient @XmlTransient
@JsonBackReference @JsonManagedReference(value = "groupmembership-group")
private Group group; private Group group;
@ManyToOne @ManyToOne
@JoinColumn(name = "MEMBER_ID") @JoinColumn(name = "MEMBER_ID")
@XmlTransient @XmlTransient
@JsonBackReference @JsonManagedReference(value = "groupmembership-user")
private User member; private User member;
public long getMembershipId() { public long getMembershipId() {

View File

@ -18,17 +18,8 @@
*/ */
package org.libreccm.security; package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.DefaultEntityGraph; import org.libreccm.core.DefaultEntityGraph;
import org.libreccm.portation.Portable;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -48,6 +39,14 @@ import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElementWrapper;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* Party is a base class for {@link User} and {@link Group} defining some common * Party is a base class for {@link User} and {@link Group} defining some common
@ -99,7 +98,7 @@ public class Party implements Serializable {
@OneToMany(mappedBy = "member") @OneToMany(mappedBy = "member")
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "rolemembership-party")
private Set<RoleMembership> roleMemberships = new HashSet<>(); private Set<RoleMembership> roleMemberships = new HashSet<>();
protected Party() { protected Party() {

View File

@ -19,6 +19,7 @@
package org.libreccm.security; package org.libreccm.security;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObject;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
@ -97,7 +98,7 @@ public class Permission implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "OBJECT_ID") @JoinColumn(name = "OBJECT_ID")
@JsonBackReference @JsonManagedReference(value = "permission-object")
private CcmObject object; private CcmObject object;
/** /**
@ -105,7 +106,7 @@ public class Permission implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "GRANTEE_ID") @JoinColumn(name = "GRANTEE_ID")
@JsonBackReference @JsonManagedReference(value = "permission-role")
private Role grantee; private Role grantee;
/** /**

View File

@ -18,6 +18,7 @@
*/ */
package org.libreccm.security; package org.libreccm.security;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotBlank;
import org.libreccm.core.DefaultEntityGraph; import org.libreccm.core.DefaultEntityGraph;
@ -150,7 +151,7 @@ public class Role implements Serializable, Portable {
@OneToMany(mappedBy = "role") @OneToMany(mappedBy = "role")
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "rolemembership-role")
private Set<RoleMembership> memberships = new HashSet<>(); private Set<RoleMembership> memberships = new HashSet<>();
/** /**
@ -159,11 +160,11 @@ public class Role implements Serializable, Portable {
@OneToMany(mappedBy = "grantee") @OneToMany(mappedBy = "grantee")
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS) @XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
@XmlElement(name = "permission", namespace = CORE_XML_NS) @XmlElement(name = "permission", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "permission-role")
private List<Permission> permissions = new ArrayList<>(); private List<Permission> permissions = new ArrayList<>();
@OneToMany(mappedBy = "role") @OneToMany(mappedBy = "role")
@JsonManagedReference @JsonBackReference(value = "taskassignment-role")
private List<TaskAssignment> assignedTasks; private List<TaskAssignment> assignedTasks;
/** /**

View File

@ -19,13 +19,9 @@
package org.libreccm.security; package org.libreccm.security;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import static org.libreccm.core.CoreConstants.*;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
@ -39,6 +35,11 @@ import javax.persistence.Table;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlTransient;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* Association class representing the association between a {@link Role} and a * Association class representing the association between a {@link Role} and a
@ -67,13 +68,13 @@ public class RoleMembership implements Serializable, Portable {
@ManyToOne @ManyToOne
@JoinColumn(name = "ROLE_ID") @JoinColumn(name = "ROLE_ID")
@XmlTransient @XmlTransient
@JsonBackReference @JsonManagedReference(value = "rolemembership-role")
private Role role; private Role role;
@ManyToOne @ManyToOne
@JoinColumn(name = "MEMBER_ID") @JoinColumn(name = "MEMBER_ID")
@XmlTransient @XmlTransient
@JsonBackReference @JsonManagedReference(value = "rolemembership-party")
private Party member; private Party member;
public long getMembershipId() { public long getMembershipId() {

View File

@ -18,21 +18,11 @@
*/ */
package org.libreccm.security; package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.DefaultEntityGraph; import org.libreccm.core.DefaultEntityGraph;
import org.libreccm.core.EmailAddress; import org.libreccm.core.EmailAddress;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.persistence.AssociationOverride; import javax.persistence.AssociationOverride;
import javax.persistence.CollectionTable; import javax.persistence.CollectionTable;
import javax.persistence.Column; import javax.persistence.Column;
@ -57,6 +47,16 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlTransient;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* A user is a person (or a system) accessing CCM. A user authenticates itself * A user is a person (or a system) accessing CCM. A user authenticates itself
@ -204,7 +204,7 @@ public class User extends Party implements Serializable, Portable {
@OneToMany(mappedBy = "member") @OneToMany(mappedBy = "member")
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "group-membership", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
@JsonManagedReference @JsonBackReference(value = "groupmembership-user")
private Set<GroupMembership> groupMemberships = new HashSet<>(); private Set<GroupMembership> groupMemberships = new HashSet<>();
protected User() { protected User() {

View File

@ -18,19 +18,10 @@
*/ */
package org.libreccm.workflow; package org.libreccm.workflow;
import static org.libreccm.core.CoreConstants.*; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import org.libreccm.security.User; import org.libreccm.security.User;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
@ -41,6 +32,14 @@ import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Temporal; import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* A task which can be assigned to a user. Also a {@code AssignableTask} can be * A task which can be assigned to a user. Also a {@code AssignableTask} can be
@ -130,7 +129,7 @@ public class AssignableTask extends Task implements Serializable, Portable {
* The roles to which task is assigned. * The roles to which task is assigned.
*/ */
@OneToMany(mappedBy = "task") @OneToMany(mappedBy = "task")
@JsonManagedReference @JsonBackReference(value = "taskassignment-assignabletask")
private List<TaskAssignment> assignments; private List<TaskAssignment> assignments;
public AssignableTask() { public AssignableTask() {

View File

@ -20,6 +20,8 @@ package org.libreccm.workflow;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObject;
import org.libreccm.core.Identifiable; import org.libreccm.core.Identifiable;
import org.libreccm.l10n.LocalizedString; import org.libreccm.l10n.LocalizedString;
@ -157,12 +159,14 @@ public class Task implements Identifiable, Serializable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "WORKFLOW_ID") @JoinColumn(name = "WORKFLOW_ID")
@JsonManagedReference(value = "task-workflow")
private Workflow workflow; private Workflow workflow;
/** /**
* Tasks which the depends of this task. * Tasks which the depends of this task.
*/ */
@ManyToMany(mappedBy = "dependsOn") @ManyToMany(mappedBy = "dependsOn")
@JsonBackReference(value = "dependson-dependent")
private List<Task> dependentTasks; private List<Task> dependentTasks;
/** /**
@ -175,6 +179,7 @@ public class Task implements Identifiable, Serializable {
@JoinColumn(name = "DEPENDS_ON_TASK_ID")}, @JoinColumn(name = "DEPENDS_ON_TASK_ID")},
inverseJoinColumns = { inverseJoinColumns = {
@JoinColumn(name = "DEPENDENT_TASK_ID")}) @JoinColumn(name = "DEPENDENT_TASK_ID")})
@JsonManagedReference(value = "dependson-dependent")
private List<Task> dependsOn; private List<Task> dependsOn;
/** /**

View File

@ -18,15 +18,11 @@
*/ */
package org.libreccm.workflow; package org.libreccm.workflow;
import static org.libreccm.core.CoreConstants.*;
import com.fasterxml.jackson.annotation.JsonBackReference; import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import org.libreccm.portation.Portable; import org.libreccm.portation.Portable;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
@ -35,6 +31,10 @@ import javax.persistence.Id;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne; import javax.persistence.ManyToOne;
import javax.persistence.Table; import javax.persistence.Table;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
/** /**
* Represents the assignment of a {@link AssignableTask} to a {@link Role}. * Represents the assignment of a {@link AssignableTask} to a {@link Role}.
@ -60,7 +60,7 @@ public class TaskAssignment implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "TASK_ID") @JoinColumn(name = "TASK_ID")
@JsonBackReference @JsonManagedReference(value = "taskassignment-assignabletask")
private AssignableTask task; private AssignableTask task;
/** /**
@ -68,7 +68,7 @@ public class TaskAssignment implements Serializable, Portable {
*/ */
@ManyToOne @ManyToOne
@JoinColumn(name = "ROLE_ID") @JoinColumn(name = "ROLE_ID")
@JsonBackReference @JsonManagedReference(value = "taskassignment-role")
private Role role; private Role role;
public long getTaskAssignmentId() { public long getTaskAssignmentId() {

View File

@ -20,6 +20,7 @@ package org.libreccm.workflow;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import com.fasterxml.jackson.annotation.JsonBackReference;
import org.libreccm.core.CcmObject; import org.libreccm.core.CcmObject;
import org.libreccm.l10n.LocalizedString; import org.libreccm.l10n.LocalizedString;
@ -151,6 +152,7 @@ public class Workflow implements Identifiable, Serializable, Portable {
* The tasks belonging to this workflow. * The tasks belonging to this workflow.
*/ */
@OneToMany(mappedBy = "workflow") @OneToMany(mappedBy = "workflow")
@JsonBackReference(value = "task-workflow")
private List<Task> tasks; private List<Task> tasks;
public Workflow() { public Workflow() {

View File

@ -77,12 +77,14 @@ public class CoreDataImportTest {
"CoreDataImportTest.war") "CoreDataImportTest.war")
.addPackage(org.libreccm.categorization.Category .addPackage(org.libreccm.categorization.Category
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.core.CcmObject.class.getPackage()) .addPackage(org.libreccm.core.CcmObject
.class.getPackage())
.addPackage(org.libreccm.l10n.LocalizedString .addPackage(org.libreccm.l10n.LocalizedString
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.portation.AbstractMarshaller .addPackage(org.libreccm.portation.AbstractMarshaller
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.security.Group.class.getPackage()) .addPackage(org.libreccm.security.Group
.class.getPackage())
.addPackage(org.libreccm.workflow.AssignableTask .addPackage(org.libreccm.workflow.AssignableTask
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.configuration.ConfigurationManager .addPackage(org.libreccm.configuration.ConfigurationManager
@ -91,6 +93,10 @@ public class CoreDataImportTest {
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.testutils.EqualsVerifier .addPackage(org.libreccm.testutils.EqualsVerifier
.class.getPackage()) .class.getPackage())
.addPackage(org.libreccm.web.CcmApplication
.class.getPackage())
.addPackage(org.libreccm.jpa.EntityManagerProducer
.class.getPackage())
.addAsLibraries(getModuleDependencies()) .addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml", .addAsResource("test-persistence.xml",
"META-INF/persistence.xml") "META-INF/persistence.xml")
@ -113,72 +119,72 @@ public class CoreDataImportTest {
public void categoriesShouldBeImported() { public void categoriesShouldBeImported() {
ImportHelper.importCategories(); ImportHelper.importCategories();
} }
//
// @Test @Test
// @InSequence(110) @InSequence(110)
// public void categorizationsShouldBeImported() { public void categorizationsShouldBeImported() {
// ImportHelper.importCategorizations(); ImportHelper.importCategorizations();
// } }
//
// @Test @Test
// @InSequence(115) @InSequence(115)
// public void usersShouldBeImported() { public void usersShouldBeImported() {
// ImportHelper.importUsers(); ImportHelper.importUsers();
// } }
//
// @Test @Test
// @InSequence(120) @InSequence(120)
// public void groupsShouldBeImported() { public void groupsShouldBeImported() {
// ImportHelper.importGroups(); ImportHelper.importGroups();
// } }
//
// @Test @Test
// @InSequence(125) @InSequence(125)
// public void groupMembershipsShouldBeImported() { public void groupMembershipsShouldBeImported() {
// ImportHelper.importGroupMemberships(); ImportHelper.importGroupMemberships();
// } }
//
// @Test @Test
// @InSequence(130) @InSequence(130)
// public void rolesShouldBeImported() { public void rolesShouldBeImported() {
// ImportHelper.importRoles(); ImportHelper.importRoles();
// } }
//
// @Test @Test
// @InSequence(135) @InSequence(135)
// public void roleMembershipsShouldBeImported() { public void roleMembershipsShouldBeImported() {
// ImportHelper.importRoleMemberships(); ImportHelper.importRoleMemberships();
// } }
//
// @Test @Test
// @InSequence(140) @InSequence(140)
// public void workflowTemplatesShouldBeImported() { public void workflowTemplatesShouldBeImported() {
// ImportHelper.importWorkflowTemplates(); ImportHelper.importWorkflowTemplates();
// } }
//
// @Test @Test
// @InSequence(145) @InSequence(145)
// public void workflowsShouldBeImported() { public void workflowsShouldBeImported() {
// ImportHelper.importWorkflows(); ImportHelper.importWorkflows();
// } }
//
// @Test @Test
// @InSequence(150) @InSequence(150)
// public void assignableTasksShouldBeImported() { public void assignableTasksShouldBeImported() {
// ImportHelper.importAssignableTasks(); ImportHelper.importAssignableTasks();
// } }
//
// @Test @Test
// @InSequence(155) @InSequence(155)
// public void taskAssignmentsShouldBeImported() { public void taskAssignmentsShouldBeImported() {
// ImportHelper.importTaskAssignments(); ImportHelper.importTaskAssignments();
// } }
//
// @Test @Test
// @InSequence(160) @InSequence(160)
// public void permissionsShouldBeImported() { public void permissionsShouldBeImported() {
// ImportHelper.importPermissions(); ImportHelper.importPermissions();
// } }
} }

View File

@ -43,17 +43,16 @@ import java.util.List;
*/ */
class ImportHelper { class ImportHelper {
private static String pathName = private static String pathName =
"/home/tosmers/Svn/libreccm/ccm-ng/ccm-core/src/test/resource" + "/home/tosmers/Svn/libreccm/ccm_ng/ccm-core/src/test/resources/" +
"/portation/trunk-iaw-export"; "portation/trunk-iaw-exports";
private static boolean indentation = false; private static boolean indentation = false;
private static String blub = "Hallo";
static void importCategories() { static void importCategories() {
CategoryMarshaller categoryMarshaller = new CategoryMarshaller categoryMarshaller = new
CategoryMarshaller(); CategoryMarshaller();
categoryMarshaller.prepare(Format.XML, pathName, categoryMarshaller.prepare(Format.XML, pathName,
"categories", indentation); "categories.xml", indentation);
List<Category> categories = categoryMarshaller.importFile(); List<Category> categories = categoryMarshaller.importFile();
} }
@ -61,21 +60,21 @@ class ImportHelper {
CategorizationMarshaller categorizationMarshaller = new CategorizationMarshaller categorizationMarshaller = new
CategorizationMarshaller(); CategorizationMarshaller();
categorizationMarshaller.prepare(Format.XML, pathName, categorizationMarshaller.prepare(Format.XML, pathName,
"categorizations", indentation); "categorizations.xml", indentation);
categorizationMarshaller.importFile(); categorizationMarshaller.importFile();
} }
static void importUsers() { static void importUsers() {
UserMarshaller userMarshaller = new UserMarshaller(); UserMarshaller userMarshaller = new UserMarshaller();
userMarshaller.prepare(Format.XML, pathName, userMarshaller.prepare(Format.XML, pathName,
"users", indentation); "users.xml", indentation);
userMarshaller.importFile(); userMarshaller.importFile();
} }
static void importGroups() { static void importGroups() {
GroupMarshaller groupMarshaller = new GroupMarshaller(); GroupMarshaller groupMarshaller = new GroupMarshaller();
groupMarshaller.prepare(Format.XML, pathName, groupMarshaller.prepare(Format.XML, pathName,
"groups", indentation); "groups.xml", indentation);
groupMarshaller.importFile(); groupMarshaller.importFile();
} }
@ -83,14 +82,14 @@ class ImportHelper {
GroupMembershipMarshaller groupMembershipMarshaller = new GroupMembershipMarshaller groupMembershipMarshaller = new
GroupMembershipMarshaller(); GroupMembershipMarshaller();
groupMembershipMarshaller.prepare(Format.XML, pathName, groupMembershipMarshaller.prepare(Format.XML, pathName,
"groupMemberships", indentation); "groupMemberships.xml", indentation);
groupMembershipMarshaller.importFile(); groupMembershipMarshaller.importFile();
} }
static void importRoles() { static void importRoles() {
RoleMarshaller roleMarshaller = new RoleMarshaller(); RoleMarshaller roleMarshaller = new RoleMarshaller();
roleMarshaller.prepare(Format.XML, pathName, roleMarshaller.prepare(Format.XML, pathName,
"roles", indentation); "roles.xml", indentation);
roleMarshaller.importFile(); roleMarshaller.importFile();
} }
@ -98,7 +97,7 @@ class ImportHelper {
RoleMembershipMarshaller roleMembershipMarshaller = new RoleMembershipMarshaller roleMembershipMarshaller = new
RoleMembershipMarshaller(); RoleMembershipMarshaller();
roleMembershipMarshaller.prepare(Format.XML, pathName, roleMembershipMarshaller.prepare(Format.XML, pathName,
"roleMemberships", indentation); "roleMemberships.xml", indentation);
roleMembershipMarshaller.importFile(); roleMembershipMarshaller.importFile();
} }
@ -106,7 +105,7 @@ class ImportHelper {
WorkflowTemplateMarshaller workflowTemplateMarshaller = new WorkflowTemplateMarshaller workflowTemplateMarshaller = new
WorkflowTemplateMarshaller(); WorkflowTemplateMarshaller();
workflowTemplateMarshaller.prepare(Format.XML, pathName, workflowTemplateMarshaller.prepare(Format.XML, pathName,
"workflowTemplates", indentation); "workflowTemplates.xml", indentation);
workflowTemplateMarshaller.importFile(); workflowTemplateMarshaller.importFile();
} }
@ -114,7 +113,7 @@ class ImportHelper {
WorkflowMarshaller workflowMarshaller = new WorkflowMarshaller workflowMarshaller = new
WorkflowMarshaller(); WorkflowMarshaller();
workflowMarshaller.prepare(Format.XML, pathName, workflowMarshaller.prepare(Format.XML, pathName,
"workflows", indentation); "workflows.xml", indentation);
workflowMarshaller.importFile(); workflowMarshaller.importFile();
} }
@ -122,7 +121,7 @@ class ImportHelper {
AssignableTaskMarshaller assignableTaskMarshaller = new AssignableTaskMarshaller assignableTaskMarshaller = new
AssignableTaskMarshaller(); AssignableTaskMarshaller();
assignableTaskMarshaller.prepare(Format.XML, pathName, assignableTaskMarshaller.prepare(Format.XML, pathName,
"assignableTasks", indentation); "assignableTasks.xml", indentation);
assignableTaskMarshaller.importFile(); assignableTaskMarshaller.importFile();
} }
@ -130,7 +129,7 @@ class ImportHelper {
TaskAssignmentMarshaller taskAssignmentMarshaller = new TaskAssignmentMarshaller taskAssignmentMarshaller = new
TaskAssignmentMarshaller(); TaskAssignmentMarshaller();
taskAssignmentMarshaller.prepare(Format.XML, pathName, taskAssignmentMarshaller.prepare(Format.XML, pathName,
"taskAssignments", indentation); "taskAssignments.xml", indentation);
taskAssignmentMarshaller.importFile(); taskAssignmentMarshaller.importFile();
} }
@ -138,7 +137,7 @@ class ImportHelper {
PermissionMarshaller permissionMarshaller = new PermissionMarshaller permissionMarshaller = new
PermissionMarshaller(); PermissionMarshaller();
permissionMarshaller.prepare(Format.XML, pathName, permissionMarshaller.prepare(Format.XML, pathName,
"permissions", indentation); "permissions.xml", indentation);
permissionMarshaller.importFile(); permissionMarshaller.importFile();
} }