CCM NG: Removed associations to User and Group from the UserTask and replaced them with an association to Role.

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3763 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2015-12-04 17:42:02 +00:00
parent d043fbea56
commit 6066ea22a2
8 changed files with 1911 additions and 1871 deletions

View File

@ -21,6 +21,7 @@ package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.NotBlank;
import org.libreccm.workflow.TaskAssignment;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
@ -92,6 +93,9 @@ public class Role implements Serializable {
@XmlElement(name = "permission", namespace = CORE_XML_NS) @XmlElement(name = "permission", namespace = CORE_XML_NS)
private List<Permission> permissions = new ArrayList<>(); private List<Permission> permissions = new ArrayList<>();
@OneToMany(mappedBy = "role")
private List<TaskAssignment> assignedTasks;
protected Role() { protected Role() {
super(); super();
} }
@ -152,6 +156,26 @@ public class Role implements Serializable {
permissions.remove(permission); permissions.remove(permission);
} }
public List<TaskAssignment> assignedTasks() {
if (assignedTasks == null) {
return null;
} else {
return Collections.unmodifiableList(assignedTasks);
}
}
protected void setAssignedTasks(final List<TaskAssignment> assignedTasks) {
this.assignedTasks = assignedTasks;
}
protected void addAssignedTask(final TaskAssignment taskAssignment) {
assignedTasks.add(taskAssignment);
}
protected void removeAssignedTask(final TaskAssignment taskAssignment) {
assignedTasks.remove(taskAssignment);
}
@Override @Override
public int hashCode() { public int hashCode() {
int hash = 7; int hash = 7;

View File

@ -137,8 +137,8 @@ public class RoleMembership implements Serializable {
return String.format("%s{ " return String.format("%s{ "
+ "membershipId = %d, " + "membershipId = %d, "
+ "user = %s, " + "user = %s, "
+ "role = %s, " + "role = %s "
+ " },", + " }",
super.toString(), super.toString(),
membershipId, membershipId,
Objects.toString(member), Objects.toString(member),

View File

@ -0,0 +1,134 @@
/*
* 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 static org.libreccm.core.CoreConstants.*;
import org.libreccm.security.Role;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Entity
@Table(name = "TASK_ASSIGNMENTS", schema = DB_SCHEMA)
public class TaskAssignment implements Serializable {
private static final long serialVersionUID = -4427537363301565707L;
@Id
@Column(name = "TASK_ASSIGNMENT_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
private long taskAssignmentId;
@ManyToOne
@JoinColumn(name = "TASK_ID")
private UserTask task;
@ManyToOne
@JoinColumn(name = "ROLE_ID")
private Role role;
public long getTaskAssignmentId() {
return taskAssignmentId;
}
protected void setTaskAssignmentId(final long taskAssignmentId) {
this.taskAssignmentId = taskAssignmentId;
}
public UserTask getTask() {
return task;
}
protected void setTask(final UserTask task) {
this.task = task;
}
public Role getRole() {
return role;
}
protected void setRole(final Role role) {
this.role = role;
}
@Override
public int hashCode() {
int hash = 7;
hash = 67 * hash
+ (int) (taskAssignmentId ^ (taskAssignmentId >>> 32));
hash = 67 * hash + Objects.hashCode(task);
hash = 67 * hash + Objects.hashCode(role);
return hash;
}
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return false;
}
if (!(obj instanceof TaskAssignment)) {
return false;
}
final TaskAssignment other = (TaskAssignment) obj;
if (!other.canEqual(this)) {
return false;
}
if (taskAssignmentId != other.getTaskAssignmentId()) {
return false;
}
if (!Objects.equals(task, other.getTask())) {
return false;
}
return Objects.equals(role, other.getRole());
}
public boolean canEqual(final Object obj) {
return obj instanceof TaskAssignment;
}
@Override
public String toString() {
return String.format("%s{ "
+ "taskAssignmentId = %d, "
+ "task = %s, "
+ "role = %s"
+ " }",
super.toString(),
taskAssignmentId,
Objects.toString(task),
Objects.toString(role));
}
}

View File

@ -21,6 +21,7 @@ package org.libreccm.workflow;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import org.libreccm.security.Group; import org.libreccm.security.Group;
import org.libreccm.security.Role;
import org.libreccm.security.User; import org.libreccm.security.User;
import java.io.Serializable; import java.io.Serializable;
@ -34,6 +35,7 @@ import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.JoinTable; import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OneToOne; import javax.persistence.OneToOne;
import javax.persistence.Table; import javax.persistence.Table;
@ -77,28 +79,12 @@ public class UserTask extends Task implements Serializable {
@SuppressWarnings("PMD.LongVariable") //Shorter name would not be descriptive @SuppressWarnings("PMD.LongVariable") //Shorter name would not be descriptive
private User notificationSender; private User notificationSender;
@OneToMany @OneToMany(mappedBy = "task")
@JoinTable(name = "WORKFLOW_USER_TASK_ASSIGNED_USERS", private List<TaskAssignment> assignments;
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_TASK_ID")},
inverseJoinColumns = {
@JoinColumn(name = "ASSIGNED_USER_ID")})
private List<User> assignedUsers;
@OneToMany
@JoinTable(name = "WORKFLOW_USER_TASK_ASSIGNED_GROUPS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_TASK_ID")},
inverseJoinColumns = {
@JoinColumn(name = "ASSIGNED_GROUP_ID")})
private List<Group> assignedGroups;
public UserTask() { public UserTask() {
super(); super();
assignedUsers = new ArrayList<>(); assignments = new ArrayList<>();
assignedGroups = new ArrayList<>();
} }
public boolean isLocked() { public boolean isLocked() {
@ -166,44 +152,24 @@ public class UserTask extends Task implements Serializable {
this.notificationSender = notificationSender; this.notificationSender = notificationSender;
} }
public List<User> getAssignedUsers() { public List<TaskAssignment> getAssignments() {
if (assignedUsers == null) { if (assignments == null) {
return null; return null;
} else { } else {
return Collections.unmodifiableList(assignedUsers); return Collections.unmodifiableList(assignments);
} }
} }
protected void setAssignedUsers(final List<User> assignedUsers) { protected void setAssignments(final List<TaskAssignment> assignments) {
this.assignedUsers = assignedUsers; this.assignments = assignments;
} }
protected void addAssignedUser(final User user) { protected void addAssignment(final TaskAssignment assignment) {
assignedUsers.add(user); assignments.add(assignment);
} }
protected void removeAssignedUser(final User user) { protected void removeAssignment(final TaskAssignment assignment) {
assignedUsers.remove(user); assignments.remove(assignment);
}
public List<Group> getAssignedGroups() {
if (assignedGroups == null) {
return null;
} else {
return Collections.unmodifiableList(assignedGroups);
}
}
protected void setAssignedGroups(final List<Group> assignedGroups) {
this.assignedGroups = assignedGroups;
}
protected void addAssignedGroup(final Group group) {
assignedGroups.add(group);
}
protected void removeAssignedGroup(final Group group) {
assignedGroups.remove(group);
} }
@Override @Override

View File

@ -39,6 +39,7 @@ public class EqualsAndHashCodeTest extends EqualsVerifier {
public static Collection<Class<?>> data() { public static Collection<Class<?>> data() {
return Arrays.asList(new Class<?>[]{ return Arrays.asList(new Class<?>[]{
Task.class, Task.class,
TaskAssignment.class,
UserTask.class, UserTask.class,
Workflow.class Workflow.class
}); });

View File

@ -39,6 +39,7 @@ public class ToStringTest extends ToStringVerifier {
public static Collection<Class<?>> data() { public static Collection<Class<?>> data() {
return Arrays.asList(new Class<?>[]{ return Arrays.asList(new Class<?>[]{
Task.class, Task.class,
TaskAssignment.class,
UserTask.class, UserTask.class,
Workflow.class Workflow.class
}); });