/*
* Copyright (c) 2008 TouK.pl
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package pl.touk.wonderfulsecurity.beans;
import pl.touk.wonderfulsecurity.exceptions.PermissionCollisionException;
import pl.touk.wonderfulsecurity.helpers.PermissionExclusion;
import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* Model object that represents system role
*
* @author Lukasz Kucharski - lkc@touk.pl
*/
@Entity
@Table(name = "WSEC_ROLE",
uniqueConstraints = {@UniqueConstraint(columnNames = {"name"})}
)
public class WsecRole implements Serializable {
// ------------------------------ FIELDS ------------------------------
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
protected String name;
protected String description;
@ManyToMany
@JoinTable(name = "WSEC_PERMISSION_ROLE", joinColumns = {@JoinColumn(name = "ROLE_ID")},
inverseJoinColumns = {@JoinColumn(name = "PERMISSION_ID")})
protected Set<WsecPermission> permissions = new HashSet<WsecPermission>();
// --------------------------- CONSTRUCTORS ---------------------------
public WsecRole() {
}
// copy constructor
public WsecRole(WsecRole role) {
this.id = role.id;
this.name = role.name;
this.description = role.description;
}
public WsecRole(String name, String description) {
this.name = name;
this.description = description;
}
// --------------------- GETTER / SETTER METHODS ---------------------
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<WsecPermission> getPermissions() {
return permissions;
}
public void setPermissions(Set<WsecPermission> permissions) {
this.permissions = permissions;
}
// ------------------------ CANONICAL METHODS ------------------------
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof WsecRole)) {
return false;
}
WsecRole rhs = (WsecRole) obj;
return ((rhs.id == null ? this.id == null : rhs.id.equals(this.id))
&& (rhs.name == null ? this.name == null : rhs.name.equals(this.name)));
}
public int hashCode() {
int result = 17;
result = 31 * result + (id==null ? 0 : id.hashCode());
result = 31 * result + (name == null ? 0 : name.hashCode());
return result;
}
public String toString() {
return new StringBuilder().append("id: ").append(id).append("\nName: ").append(name).toString();
}
// -------------------------- OTHER METHODS --------------------------
public boolean addPermission(WsecPermission permission) throws PermissionCollisionException{
PermissionExclusion.checkIfConflicts(this, permission);
permission.receivingRoles.add(this);
return permissions.add(permission);
}
public Set<WsecPermission> getAllPermissionExcludes(){
Set<WsecPermission> result = new HashSet<WsecPermission>();
for (WsecPermission perm : this.permissions){
result.addAll(perm.getExcludes());
}
return result;
}
public Set<WsecPermission> getAllPermissions() {
return permissions;
}
public boolean hasPermission(WsecPermission permission){
return permissions.contains(permission);
}
public boolean removePermission(WsecPermission permission) {
permission.receivingRoles.remove(this);
return permissions.remove(permission);
}
}