[UPDATE]
- adds new export content for import to tests resources - exchanges Jackson back- and managed-reference annotations with identityInfo, ignore and identityReference annotations - adds necessary ObjectIdGenerator and ObjectIdResolver implementations - does not yet implement the generateId-Method of every ObjectIdResolver git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4640 8810af33-2d31-482b-a856-94f89814c4dfccm-docs
parent
7f94ce6f97
commit
5689c7d239
|
|
@ -19,6 +19,8 @@
|
|||
package org.libreccm.categorization;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityReference;
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
|
|
@ -96,6 +98,8 @@ import javax.persistence.FetchType;
|
|||
+ "WHERE c.category = :category "
|
||||
+ "AND c.index = TRUE")
|
||||
})
|
||||
@JsonIdentityInfo(generator = CategorizationIdGenerator.class,
|
||||
property = "customCatId")
|
||||
public class Categorization implements Serializable, Relation, Portable {
|
||||
|
||||
private static final long serialVersionUID = 201504301320L;
|
||||
|
|
@ -113,7 +117,7 @@ public class Categorization implements Serializable, Relation, Portable {
|
|||
*/
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "CATEGORY_ID")
|
||||
@JsonBackReference(value = "category-categorization")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Category category;
|
||||
|
||||
/**
|
||||
|
|
@ -121,7 +125,7 @@ public class Categorization implements Serializable, Relation, Portable {
|
|||
*/
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "OBJECT_ID")
|
||||
@JsonBackReference(value = "object-categorization")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private CcmObject categorizedObject;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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.categorization;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class CategorizationIdGenerator extends ObjectIdGenerator<String> {
|
||||
@Override
|
||||
public Class<?> getScope() {
|
||||
return Categorization.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(ObjectIdGenerator<?> gen) {
|
||||
return gen instanceof CategorizationIdGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> forScope(Class<?> scope) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> newForSerialization(Object context) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdKey key(Object key) {
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
return new IdKey(Categorization.class, Categorization.class, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateId(Object forPojo) {
|
||||
if (!(forPojo instanceof Categorization)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Only Categorization instances are supported.");
|
||||
}
|
||||
|
||||
final Categorization categorization = (Categorization) forPojo;
|
||||
|
||||
return String.format("{%s}{%s}",
|
||||
categorization.getCategory().getUuid(),
|
||||
categorization.getCategorizedObject().getUuid());
|
||||
}
|
||||
}
|
||||
|
|
@ -18,23 +18,16 @@
|
|||
*/
|
||||
package org.libreccm.categorization;
|
||||
|
||||
import static org.libreccm.categorization.CategorizationConstants.*;
|
||||
import static org.libreccm.core.CoreConstants.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
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.hibernate.validator.constraints.NotBlank;
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
import org.libreccm.portation.Portable;
|
||||
import org.libreccm.security.RecursivePermissions;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.persistence.AssociationOverride;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Embedded;
|
||||
|
|
@ -54,6 +47,14 @@ import javax.validation.constraints.Pattern;
|
|||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.libreccm.categorization.CategorizationConstants.CAT_XML_NS;
|
||||
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
||||
|
||||
/**
|
||||
* The category entity represents a single category. Each category is part of a
|
||||
|
|
@ -138,6 +139,9 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
)
|
||||
})
|
||||
@XmlRootElement(name = "category", namespace = CAT_XML_NS)
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = CategoryIdResolver.class,
|
||||
property = "uuid")
|
||||
public class Category extends CcmObject implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -7250208963391878547L;
|
||||
|
|
@ -218,7 +222,7 @@ public class Category extends CcmObject implements Serializable, Portable {
|
|||
@RecursivePermissions
|
||||
@OneToMany(mappedBy = "category", fetch = FetchType.LAZY)
|
||||
@XmlElementWrapper(name = "objects", namespace = CAT_XML_NS)
|
||||
@JsonManagedReference(value = "category-categorization")
|
||||
@JsonIgnore
|
||||
private List<Categorization> objects;
|
||||
|
||||
/**
|
||||
|
|
@ -228,7 +232,7 @@ public class Category extends CcmObject implements Serializable, Portable {
|
|||
@OneToMany(mappedBy = "parentCategory", fetch = FetchType.LAZY)
|
||||
@XmlElementWrapper(name = "subcategories", namespace = CAT_XML_NS)
|
||||
@XmlElement(name = "category")
|
||||
@JsonManagedReference(value = "subcategory-parentcategory")
|
||||
@JsonIgnore
|
||||
private List<Category> subCategories;
|
||||
|
||||
/**
|
||||
|
|
@ -237,7 +241,7 @@ public class Category extends CcmObject implements Serializable, Portable {
|
|||
*/
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "PARENT_CATEGORY_ID")
|
||||
@JsonBackReference(value = "subcategory-parentcategory")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Category parentCategory;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* 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.categorization;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
@RequestScoped
|
||||
public class CategoryIdResolver implements ObjectIdResolver {
|
||||
@Inject
|
||||
private CategoryRepository categoryRepository;
|
||||
|
||||
@Override
|
||||
public void bindItem(ObjectIdGenerator.IdKey idKey,
|
||||
Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(ObjectIdGenerator.IdKey id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(Object context) {
|
||||
return new CategoryIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof CategoryIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,8 +18,9 @@
|
|||
*/
|
||||
package org.libreccm.core;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.hibernate.envers.Audited;
|
||||
import org.hibernate.search.annotations.Field;
|
||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||
|
|
@ -83,6 +84,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
//persistence system we can't yet refactor it to make PMD happy. Also I think
|
||||
//this is a false warning.
|
||||
@SuppressWarnings("PMD.TooManyMethods")
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = CcmObjectIdResolver.class,
|
||||
property = "uuid")
|
||||
public class CcmObject implements Identifiable, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 201504261329L;
|
||||
|
|
@ -122,7 +126,7 @@ public class CcmObject implements Identifiable, Serializable {
|
|||
@IndexedEmbedded(includePaths = {"grantedPrivilege", "grantee.name"})
|
||||
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "permission", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "object-permission")
|
||||
@JsonIgnore
|
||||
private List<Permission> permissions;
|
||||
|
||||
/**
|
||||
|
|
@ -131,7 +135,7 @@ public class CcmObject implements Identifiable, Serializable {
|
|||
@OneToMany(mappedBy = "categorizedObject")
|
||||
@XmlElementWrapper(name = "categories", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "category", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "object-categorization")
|
||||
@JsonIgnore
|
||||
private List<Categorization> categories;
|
||||
|
||||
public CcmObject() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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.core;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class CcmObjectIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(ObjectIdGenerator.IdKey idKey,
|
||||
Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(ObjectIdGenerator.IdKey id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(Object context) {
|
||||
return new CcmObjectIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof CcmObjectIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,9 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
|
|
@ -33,7 +35,6 @@ import javax.persistence.Table;
|
|||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -89,6 +90,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
})
|
||||
})
|
||||
@XmlRootElement(name = "user-group", namespace = CORE_XML_NS)
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = GroupIdResolver.class,
|
||||
property = "name")
|
||||
public class Group extends Party implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -4800759206452780739L;
|
||||
|
|
@ -100,7 +104,7 @@ public class Group extends Party implements Serializable, Portable {
|
|||
@OneToMany(mappedBy = "group")
|
||||
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "group-membership", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "group-groupmembership")
|
||||
@JsonIgnore
|
||||
private Set<GroupMembership> memberships = new HashSet<>();
|
||||
|
||||
public Group() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class GroupIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new GroupIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver objectIdResolver) {
|
||||
return objectIdResolver instanceof GroupIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -44,6 +44,7 @@ public class GroupMarshaller extends AbstractMarshaller<Group> {
|
|||
@Override
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
protected void insertIntoDb(Group portableObject) {
|
||||
portableObject.setPartyId(portableObject.getPartyId() * -1);
|
||||
groupRepository.save(portableObject);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityReference;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
import javax.persistence.Column;
|
||||
|
|
@ -54,6 +54,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
query = "SELECT m FROM GroupMembership m "
|
||||
+ "WHERE m.member = :member AND m.group = :group")})
|
||||
@XmlRootElement(name = "group-membership", namespace = CORE_XML_NS)
|
||||
@JsonIdentityInfo(generator = GroupMembershipIdGenerator.class,
|
||||
property = "customMemId")
|
||||
public class GroupMembership implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = 83192968306850665L;
|
||||
|
|
@ -67,13 +69,13 @@ public class GroupMembership implements Serializable, Portable {
|
|||
@ManyToOne
|
||||
@JoinColumn(name = "GROUP_ID")
|
||||
@XmlTransient
|
||||
@JsonBackReference(value = "group-groupmembership")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Group group;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "MEMBER_ID")
|
||||
@XmlTransient
|
||||
@JsonBackReference(value = "user-groupmembership")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private User member;
|
||||
|
||||
public long getMembershipId() {
|
||||
|
|
|
|||
|
|
@ -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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class GroupMembershipIdGenerator extends ObjectIdGenerator<String> {
|
||||
@Override
|
||||
public Class<?> getScope() {
|
||||
return GroupMembership.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdGenerator<?> gen) {
|
||||
return gen instanceof GroupMembershipIdGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> forScope(final Class<?> scope) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> newForSerialization(final Object context) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdKey key(final Object key) {
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
return new IdKey(GroupMembership.class, GroupMembership.class, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateId(final Object forPojo) {
|
||||
if (!(forPojo instanceof GroupMembership)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Only GroupMembership instances are supported.");
|
||||
}
|
||||
|
||||
final GroupMembership membership = (GroupMembership) forPojo;
|
||||
|
||||
return String.format("{%s}{%s}",
|
||||
membership.getGroup().getName(),
|
||||
membership.getMember().getName());
|
||||
}
|
||||
}
|
||||
|
|
@ -45,10 +45,7 @@ public class GroupMembershipMarshaller extends AbstractMarshaller<GroupMembershi
|
|||
@Override
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
protected void insertIntoDb(GroupMembership portableObject) {
|
||||
if (portableObject.getMembershipId() == 0) {
|
||||
entityManager.persist(portableObject);
|
||||
} else {
|
||||
entityManager.merge(portableObject);
|
||||
}
|
||||
portableObject.setMembershipId(portableObject.getMembershipId() * -1);
|
||||
entityManager.merge(portableObject);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
|
|
@ -38,7 +40,6 @@ import javax.validation.constraints.NotNull;
|
|||
import javax.validation.constraints.Pattern;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -73,6 +74,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
attributeNodes = @NamedAttributeNode(
|
||||
value = "roleMemberships"))
|
||||
})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = PartyIdResolver.class,
|
||||
property = "name")
|
||||
public class Party implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 3319997992281332204L;
|
||||
|
|
@ -97,7 +101,7 @@ public class Party implements Serializable {
|
|||
@OneToMany(mappedBy = "member")
|
||||
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "role-membership", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "party-rolemembership")
|
||||
@JsonIgnore
|
||||
private Set<RoleMembership> roleMemberships = new HashSet<>();
|
||||
|
||||
protected Party() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class PartyIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new PartyIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof PartyIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,8 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityReference;
|
||||
import org.hibernate.search.annotations.ContainedIn;
|
||||
import org.hibernate.search.annotations.Field;
|
||||
import org.hibernate.search.annotations.IndexedEmbedded;
|
||||
|
|
@ -34,6 +35,7 @@ import javax.persistence.JoinColumn;
|
|||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.NamedQueries;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
|
|
@ -41,7 +43,6 @@ 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 java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
|
|
@ -49,8 +50,6 @@ import java.util.Objects;
|
|||
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
|
||||
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
||||
|
||||
import javax.persistence.OneToOne;
|
||||
|
||||
/**
|
||||
* A permission grants a privilege on an object or system wide to {@link Role}.
|
||||
*
|
||||
|
|
@ -100,6 +99,9 @@ import javax.persistence.OneToOne;
|
|||
})
|
||||
@XmlRootElement(name = "permission", namespace = CORE_XML_NS)
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@JsonIdentityInfo(generator = PermissionIdGenerator.class,
|
||||
resolver = PermissionIdResolver.class,
|
||||
property = "customPermId")
|
||||
public class Permission implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -5178045844045517958L;
|
||||
|
|
@ -127,7 +129,7 @@ public class Permission implements Serializable, Portable {
|
|||
@ManyToOne
|
||||
@JoinColumn(name = "OBJECT_ID")
|
||||
@ContainedIn
|
||||
@JsonBackReference(value = "object-permission")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private CcmObject object;
|
||||
|
||||
/**
|
||||
|
|
@ -136,7 +138,7 @@ public class Permission implements Serializable, Portable {
|
|||
@ManyToOne
|
||||
@IndexedEmbedded
|
||||
@JoinColumn(name = "GRANTEE_ID")
|
||||
@JsonBackReference(value = "role-permission")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Role grantee;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class PermissionIdGenerator extends ObjectIdGenerator<String> {
|
||||
@Override
|
||||
public Class<?> getScope() {
|
||||
return Permission.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdGenerator<?> gen) {
|
||||
return gen instanceof PermissionIdGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> forScope(final Class<?> scope) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> newForSerialization(final Object context) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdKey key(final Object key) {
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
return new IdKey(Permission.class, Permission.class, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateId(final Object forPojo) {
|
||||
if (!(forPojo instanceof Permission)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Only Permission instances are supported.");
|
||||
}
|
||||
|
||||
final Permission permission = (Permission) forPojo;
|
||||
|
||||
String id = permission.getGrantedPrivilege() +
|
||||
permission.getPermissionId();
|
||||
boolean a = false, b = false;
|
||||
if (permission.getObject() != null) {
|
||||
id += permission.getObject().getUuid();
|
||||
a = true;
|
||||
}
|
||||
if (permission.getGrantee() != null) {
|
||||
id += permission.getGrantee().getName();
|
||||
b = true;
|
||||
}
|
||||
|
||||
// if (!(a || b)) {
|
||||
// throw new IllegalStateException();
|
||||
// }
|
||||
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class PermissionIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new PermissionIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof PermissionIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,10 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.hibernate.search.annotations.Field;
|
||||
import org.hibernate.validator.constraints.NotBlank;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
|
@ -46,7 +49,6 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
|||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
@ -55,8 +57,6 @@ import java.util.List;
|
|||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import org.hibernate.search.annotations.Field;
|
||||
|
||||
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
|
||||
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
||||
|
||||
|
|
@ -134,6 +134,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
@XmlRootElement(name = "role", namespace = CORE_XML_NS)
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
@SuppressWarnings({"PMD.ShortClassName", "PMD.TooManyMethods"})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = RoleIdResolver.class,
|
||||
property = "name")
|
||||
public class Role implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -7121296514181469687L;
|
||||
|
|
@ -160,13 +163,27 @@ public class Role implements Serializable, Portable {
|
|||
@XmlElement(name = "name", namespace = CORE_XML_NS)
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* An optional description for a role.
|
||||
*/
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "ROLE_DESCRIPTIONS",
|
||||
schema = DB_SCHEMA,
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
}))
|
||||
@XmlElement(name = "description", namespace = CORE_XML_NS)
|
||||
private LocalizedString description = new LocalizedString();
|
||||
|
||||
/**
|
||||
* All memberships of the roles.
|
||||
*/
|
||||
@OneToMany(mappedBy = "role")
|
||||
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "role-membership", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "role-rolemembership")
|
||||
@JsonIgnore
|
||||
private Set<RoleMembership> memberships = new HashSet<>();
|
||||
|
||||
/**
|
||||
|
|
@ -175,27 +192,13 @@ public class Role implements Serializable, Portable {
|
|||
@OneToMany(mappedBy = "grantee")
|
||||
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "permission", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "role-permission")
|
||||
@JsonIgnore
|
||||
private List<Permission> permissions = new ArrayList<>();
|
||||
|
||||
@OneToMany(mappedBy = "role")
|
||||
@JsonManagedReference(value = "role-taskassignment")
|
||||
@JsonIgnore
|
||||
private List<TaskAssignment> assignedTasks = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* An optional description for a role.
|
||||
*/
|
||||
@Embedded
|
||||
@AssociationOverride(
|
||||
name = "values",
|
||||
joinTable = @JoinTable(name = "ROLE_DESCRIPTIONS",
|
||||
schema = DB_SCHEMA,
|
||||
joinColumns = {
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
}))
|
||||
@XmlElement(name = "description", namespace = CORE_XML_NS)
|
||||
private LocalizedString description = new LocalizedString();
|
||||
|
||||
public Role() {
|
||||
super();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class RoleIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new RoleIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof RoleIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,8 +18,8 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityReference;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
import javax.persistence.Column;
|
||||
|
|
@ -55,6 +55,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
+ "WHERE m.member = :member AND m.role = :role")
|
||||
})
|
||||
@XmlRootElement(name = "role-membership", namespace = CORE_XML_NS)
|
||||
@JsonIdentityInfo(generator = RoleMembershipIdGenerator.class,
|
||||
property = "customMemId")
|
||||
public class RoleMembership implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -3049727720697964793L;
|
||||
|
|
@ -68,13 +70,13 @@ public class RoleMembership implements Serializable, Portable {
|
|||
@ManyToOne
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
@XmlTransient
|
||||
@JsonBackReference(value = "role-rolemembership")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Role role;
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "MEMBER_ID")
|
||||
@XmlTransient
|
||||
@JsonBackReference(value = "party-rolemembership")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Party member;
|
||||
|
||||
public long getMembershipId() {
|
||||
|
|
|
|||
|
|
@ -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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class RoleMembershipIdGenerator extends ObjectIdGenerator<String> {
|
||||
@Override
|
||||
public Class<?> getScope() {
|
||||
return RoleMembership.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdGenerator<?> gen) {
|
||||
return gen instanceof RoleMembershipIdGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> forScope(final Class<?> scope) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> newForSerialization(final Object context) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdKey key(final Object key) {
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
return new IdKey(RoleMembership.class, RoleMembership.class, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateId(final Object forPojo) {
|
||||
if (!(forPojo instanceof RoleMembership)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Only RoleMembership instances are supported.");
|
||||
}
|
||||
|
||||
final RoleMembership membership = (RoleMembership) forPojo;
|
||||
|
||||
return String.format("{%s}{%s}",
|
||||
membership.getRole().getName(),
|
||||
membership.getMember().getName());
|
||||
}
|
||||
}
|
||||
|
|
@ -59,9 +59,6 @@ public class RoleMembershipMarshaller extends AbstractMarshaller<RoleMembership>
|
|||
final RoleMembership roleMembership = save(portableObject);
|
||||
LOGGER.debug("Saved RoleMembership with id {}.",
|
||||
roleMembership.getMembershipId());
|
||||
// } else {
|
||||
// entityManager.merge(portableObject);
|
||||
// }
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRES_NEW)
|
||||
|
|
|
|||
|
|
@ -18,7 +18,10 @@
|
|||
*/
|
||||
package org.libreccm.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.libreccm.core.EmailAddress;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
|
|
@ -46,7 +49,6 @@ import javax.xml.bind.annotation.XmlElement;
|
|||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
|
@ -126,6 +128,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
//Supressing a few warnings from PMD because they misleading here.
|
||||
//User is perfectly fine class name, and the complexity is not to high...
|
||||
@SuppressWarnings({"PMD.ShortClassName", "PMD.LongVariable"})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = UserIdResolver.class,
|
||||
property = "name")
|
||||
public class User extends Party implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = 4035223413596611393L;
|
||||
|
|
@ -203,7 +208,7 @@ public class User extends Party implements Serializable, Portable {
|
|||
@OneToMany(mappedBy = "member")
|
||||
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
|
||||
@XmlElement(name = "group-membership", namespace = CORE_XML_NS)
|
||||
@JsonManagedReference(value = "user-groupmembership")
|
||||
@JsonIgnore
|
||||
private Set<GroupMembership> groupMemberships = new HashSet<>();
|
||||
|
||||
protected User() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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.security;
|
||||
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerator;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdResolver;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class UserIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new UserIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof UserIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,8 +18,9 @@
|
|||
*/
|
||||
package org.libreccm.workflow;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.libreccm.portation.Portable;
|
||||
import org.libreccm.security.User;
|
||||
|
||||
|
|
@ -81,6 +82,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
@SuppressWarnings({"PMD.CyclomaticComplexity",
|
||||
"PMD.StdCyclomaticComplexity",
|
||||
"PMD.ModifiedCyclomaticComplexity"})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = AssignableTaskIdResolver.class,
|
||||
property = "uuid")
|
||||
public class AssignableTask extends Task implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = 4188064584389893019L;
|
||||
|
|
@ -130,7 +134,7 @@ public class AssignableTask extends Task implements Serializable, Portable {
|
|||
* The roles to which task is assigned.
|
||||
*/
|
||||
@OneToMany(mappedBy = "task")
|
||||
@JsonManagedReference(value = "assignabletask-taskassignment")
|
||||
@JsonIgnore
|
||||
private List<TaskAssignment> assignments;
|
||||
|
||||
public AssignableTask() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class AssignableTaskIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new AssignableTaskIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof AssignableTaskIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,8 +18,9 @@
|
|||
*/
|
||||
package org.libreccm.workflow;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
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;
|
||||
|
|
@ -98,6 +99,9 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
+ "WHERE t.workflow = :workflow "
|
||||
+ "AND t.taskState = org.libreccm.workflow.TaskState.FINISHED")
|
||||
})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = TaskIdResolver.class,
|
||||
property = "uuid")
|
||||
public class Task implements Identifiable, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8161343036908150426L;
|
||||
|
|
@ -159,16 +163,14 @@ public class Task implements Identifiable, Serializable {
|
|||
*/
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "WORKFLOW_ID")
|
||||
@JsonBackReference(value = "workflow-task")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Workflow workflow;
|
||||
|
||||
/**
|
||||
* Tasks which the depends of this task.
|
||||
*/
|
||||
@ManyToMany(mappedBy = "dependsOn")
|
||||
@JsonIdentityInfo(
|
||||
generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
property = "taskId")
|
||||
@JsonIgnore
|
||||
private List<Task> dependentTasks;
|
||||
|
||||
/**
|
||||
|
|
@ -181,9 +183,7 @@ public class Task implements Identifiable, Serializable {
|
|||
@JoinColumn(name = "DEPENDS_ON_TASK_ID")},
|
||||
inverseJoinColumns = {
|
||||
@JoinColumn(name = "DEPENDENT_TASK_ID")})
|
||||
@JsonIdentityInfo(
|
||||
generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
property = "taskId")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private List<Task> dependsOn;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,8 +18,8 @@
|
|||
*/
|
||||
package org.libreccm.workflow;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityReference;
|
||||
import org.libreccm.portation.Portable;
|
||||
import org.libreccm.security.Role;
|
||||
|
||||
|
|
@ -43,6 +43,8 @@ import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
|||
*/
|
||||
@Entity
|
||||
@Table(name = "WORKFLOW_TASK_ASSIGNMENTS", schema = DB_SCHEMA)
|
||||
@JsonIdentityInfo(generator = TaskAssignmentIdGenerator.class,
|
||||
property = "customAssignId")
|
||||
public class TaskAssignment implements Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = -4427537363301565707L;
|
||||
|
|
@ -60,7 +62,7 @@ public class TaskAssignment implements Serializable, Portable {
|
|||
*/
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "TASK_ID")
|
||||
@JsonBackReference(value = "assignabletask-taskassignment")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private AssignableTask task;
|
||||
|
||||
/**
|
||||
|
|
@ -68,7 +70,7 @@ public class TaskAssignment implements Serializable, Portable {
|
|||
*/
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "ROLE_ID")
|
||||
@JsonBackReference(value = "role-taskassignment")
|
||||
@JsonIdentityReference(alwaysAsId = true)
|
||||
private Role role;
|
||||
|
||||
public long getTaskAssignmentId() {
|
||||
|
|
|
|||
|
|
@ -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 <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class TaskAssignmentIdGenerator extends ObjectIdGenerator<String> {
|
||||
@Override
|
||||
public Class<?> getScope() {
|
||||
return TaskAssignment.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdGenerator<?> gen) {
|
||||
return gen instanceof TaskAssignmentIdGenerator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> forScope(final Class<?> scope) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdGenerator<String> newForSerialization(final Object context) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IdKey key(final Object key) {
|
||||
if (key == null) {
|
||||
return null;
|
||||
}
|
||||
return new IdKey(TaskAssignment.class, TaskAssignment.class, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateId(final Object forPojo) {
|
||||
if (!(forPojo instanceof TaskAssignment)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Only RoleMembership instances are supported.");
|
||||
}
|
||||
|
||||
final TaskAssignment assignment = (TaskAssignment) forPojo;
|
||||
|
||||
return String.format("{%s}{%s}",
|
||||
assignment.getTask().getUuid(),
|
||||
assignment.getRole().getName());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class TaskIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new TaskIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof TaskIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -18,18 +18,13 @@
|
|||
*/
|
||||
package org.libreccm.workflow;
|
||||
|
||||
import static org.libreccm.core.CoreConstants.*;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
|
||||
import org.libreccm.core.CcmObject;
|
||||
import org.libreccm.core.Identifiable;
|
||||
import org.libreccm.l10n.LocalizedString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.libreccm.portation.Portable;
|
||||
|
||||
import javax.persistence.AssociationOverride;
|
||||
import javax.persistence.Column;
|
||||
|
|
@ -51,8 +46,13 @@ import javax.persistence.OneToMany;
|
|||
import javax.persistence.OneToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import org.libreccm.core.Identifiable;
|
||||
import org.libreccm.portation.Portable;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
|
||||
|
||||
/**
|
||||
* A workflow is a collection of tasks which are performed on an object. Tasks
|
||||
|
|
@ -73,6 +73,9 @@ import org.libreccm.portation.Portable;
|
|||
query = "SELECT w FROM Workflow w "
|
||||
+ "WHERE W.object = :object")
|
||||
})
|
||||
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,
|
||||
resolver = WorkflowIdResolver.class,
|
||||
property = "uuid")
|
||||
public class Workflow implements Identifiable, Serializable, Portable {
|
||||
|
||||
private static final long serialVersionUID = 4322500264543325829L;
|
||||
|
|
@ -157,7 +160,7 @@ public class Workflow implements Identifiable, Serializable, Portable {
|
|||
* The tasks belonging to this workflow.
|
||||
*/
|
||||
@OneToMany(mappedBy = "workflow")
|
||||
@JsonManagedReference(value = "workflow-task")
|
||||
@JsonIgnore
|
||||
private List<Task> tasks;
|
||||
|
||||
public Workflow() {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* 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;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:tosmers@uni-bremen.de>Tobias Osmers</a>
|
||||
* @version created on 3/23/17
|
||||
*/
|
||||
public class WorkflowIdResolver implements ObjectIdResolver {
|
||||
@Override
|
||||
public void bindItem(final ObjectIdGenerator.IdKey id,
|
||||
final Object pojo) {
|
||||
// According to the Jackson JavaDoc, this method can be used to keep
|
||||
// track of objects directly in a resolver implementation. We don't need
|
||||
// this here therefore this method is empty.
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object resolveId(final ObjectIdGenerator.IdKey id) {
|
||||
// Find the user for the id (don't confuse that with the primary key!).
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIdResolver newForDeserialization(final Object context) {
|
||||
return new WorkflowIdResolver();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canUseFor(final ObjectIdResolver resolverType) {
|
||||
return resolverType instanceof WorkflowIdResolver;
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,7 @@ import org.jboss.arquillian.junit.InSequence;
|
|||
import org.jboss.arquillian.persistence.CleanupUsingScript;
|
||||
import org.jboss.arquillian.persistence.CreateSchema;
|
||||
import org.jboss.arquillian.persistence.PersistenceTest;
|
||||
import org.jboss.arquillian.persistence.TestExecutionPhase;
|
||||
import org.jboss.arquillian.transaction.api.annotation.TransactionMode;
|
||||
import org.jboss.arquillian.transaction.api.annotation.Transactional;
|
||||
import org.jboss.shrinkwrap.api.ShrinkWrap;
|
||||
|
|
@ -39,9 +40,7 @@ import org.junit.experimental.categories.Category;
|
|||
import org.junit.runner.RunWith;
|
||||
import org.libreccm.tests.categories.IntegrationTest;
|
||||
|
||||
import javax.faces.bean.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import org.jboss.arquillian.persistence.TestExecutionPhase;
|
||||
|
||||
import static org.libreccm.testutils.DependenciesHelpers.getModuleDependencies;
|
||||
|
||||
|
|
@ -127,79 +126,75 @@ public class CoreDataImportTest {
|
|||
// TEST SECTION
|
||||
|
||||
@Test
|
||||
@InSequence(105)
|
||||
public void categoriesShouldBeImported() {
|
||||
@InSequence(115)
|
||||
public void roleMembershipsShouldBeImported() {
|
||||
Assert.assertFalse(importHelper.importRoleMemberships());
|
||||
}
|
||||
|
||||
//@Test
|
||||
@Test
|
||||
@InSequence(110)
|
||||
public void categorizationsShouldBeImported() {
|
||||
importHelper.importGroupMemberships();
|
||||
public void groupMembershipsShouldBeImported() {
|
||||
Assert.assertFalse(importHelper.importGroupMemberships());
|
||||
}
|
||||
|
||||
//@Test
|
||||
@Test
|
||||
@InSequence(115)
|
||||
public void usersShouldBeImported() {
|
||||
importHelper.importGroups();
|
||||
public void groupsShouldBeImported() {
|
||||
Assert.assertFalse(importHelper.importGroups());
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(120)
|
||||
public void groupsShouldBeImported() {
|
||||
public void usersShouldBeImported() {
|
||||
importHelper.importUsers();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(125)
|
||||
public void groupMembershipsShouldBeImported() {
|
||||
public void taskAssignmentsMembershipsShouldBeImported() {
|
||||
importHelper.importTaskAssignments();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(130)
|
||||
public void rolesShouldBeImported() {
|
||||
public void assignableTasksShouldBeImported() {
|
||||
importHelper.importAssignableTasks();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(135)
|
||||
public void roleMembershipsShouldBeImported() {
|
||||
public void workflowTemplatesShouldBeImported() {
|
||||
importHelper.importWorkflowTemplates();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(140)
|
||||
public void workflowTemplatesShouldBeImported() {
|
||||
public void workflowsShouldBeImported() {
|
||||
importHelper.importWorkflows();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//@Test
|
||||
@InSequence(145)
|
||||
public void workflowsShouldBeImported() {
|
||||
public void categorizationsShouldBeImported() {
|
||||
importHelper.importCategorizations();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(150)
|
||||
public void assignableTasksShouldBeImported() {
|
||||
public void PermissionsShouldBeImported() {
|
||||
importHelper.importPermissions();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(155)
|
||||
public void taskAssignmentsShouldBeImported() {
|
||||
public void categoriesShouldBeImported() {
|
||||
importHelper.importCategories();
|
||||
}
|
||||
|
||||
//@Test
|
||||
@InSequence(160)
|
||||
public void permissionsShouldBeImported() {
|
||||
public void rolesShouldBeImported() {
|
||||
importHelper.importRoles();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,8 +55,8 @@ import javax.inject.Inject;
|
|||
*/
|
||||
@RequestScoped
|
||||
class ImportHelper {
|
||||
private String repoPath = "/home/jensp/pwi/libreccm/ccm/";
|
||||
//private String repoPath = "";
|
||||
//private String repoPath = "/home/jensp/pwi/libreccm/ccm/";
|
||||
private String repoPath = "/home/tosmers/Svn/libreccm/";
|
||||
private String projectPath = "ccm_ng/ccm-core/src/test/resources/" +
|
||||
"portation/trunk-iaw-exports";
|
||||
private boolean indentation = false;
|
||||
|
|
@ -99,40 +99,40 @@ class ImportHelper {
|
|||
private PermissionMarshaller permissionMarshaller;
|
||||
|
||||
|
||||
void importCategories() {
|
||||
boolean importCategories() {
|
||||
categoryMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"categories.xml", indentation);
|
||||
categoryMarshaller.importFile();
|
||||
return categoryMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importCategorizations() {
|
||||
boolean importCategorizations() {
|
||||
categorizationMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"categorizations.xml", indentation);
|
||||
categorizationMarshaller.importFile();
|
||||
return categorizationMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importUsers() {
|
||||
boolean importUsers() {
|
||||
userMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"users.xml", indentation);
|
||||
userMarshaller.importFile();
|
||||
return userMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importGroups() {
|
||||
boolean importGroups() {
|
||||
groupMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"groups.xml", indentation);
|
||||
groupMarshaller.importFile();
|
||||
return groupMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importGroupMemberships() {
|
||||
boolean importGroupMemberships() {
|
||||
groupMembershipMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"groupMemberships.xml", indentation);
|
||||
groupMembershipMarshaller.importFile();
|
||||
return groupMembershipMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importRoles() {
|
||||
boolean importRoles() {
|
||||
roleMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"roles.xml", indentation);
|
||||
roleMarshaller.importFile();
|
||||
return roleMarshaller.importFile();
|
||||
}
|
||||
|
||||
boolean importRoleMemberships() {
|
||||
|
|
@ -141,34 +141,34 @@ class ImportHelper {
|
|||
return roleMembershipMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importWorkflowTemplates() {
|
||||
boolean importWorkflowTemplates() {
|
||||
workflowTemplateMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"workflowTemplates.xml", indentation);
|
||||
workflowTemplateMarshaller.importFile();
|
||||
return workflowTemplateMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importWorkflows() {
|
||||
boolean importWorkflows() {
|
||||
workflowMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"workflows.xml", indentation);
|
||||
workflowMarshaller.importFile();
|
||||
return workflowMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importAssignableTasks() {
|
||||
boolean importAssignableTasks() {
|
||||
assignableTaskMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"assignableTasks.xml", indentation);
|
||||
assignableTaskMarshaller.importFile();
|
||||
return assignableTaskMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importTaskAssignments() {
|
||||
boolean importTaskAssignments() {
|
||||
taskAssignmentMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"taskAssignments.xml", indentation);
|
||||
taskAssignmentMarshaller.importFile();
|
||||
return taskAssignmentMarshaller.importFile();
|
||||
}
|
||||
|
||||
void importPermissions() {
|
||||
boolean importPermissions() {
|
||||
permissionMarshaller.prepare(Format.XML, repoPath + projectPath,
|
||||
"permissions.xml", indentation);
|
||||
permissionMarshaller.importFile();
|
||||
return permissionMarshaller.importFile();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue