package org.commonjava.web.user.model;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.validator.constraints.NotBlank;
@Entity
@Table( name = "roles" )
public class Role
{
public static final String ADMIN = "admin";
public static final String NAMESPACE = "roles";
@Id
@GeneratedValue
private int id;
@NotBlank
@Column( unique = true )
private String name;
@ManyToMany
private Set<Permission> permissions;
public Role()
{
}
public Role( final String name, final Permission... perms )
{
this.name = name;
this.permissions = new HashSet<Permission>( Arrays.asList( perms ) );
}
public Role( final String name, final Collection<Permission> perms )
{
this.name = name;
this.permissions = new HashSet<Permission>( perms );
}
public int getId()
{
return id;
}
public void setId( final int id )
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName( final String name )
{
this.name = name;
}
public synchronized void addPermission( final Permission permission )
{
if ( permissions == null )
{
permissions = new HashSet<Permission>();
}
permissions.add( permission );
}
public void removePermission( final Permission permission )
{
if ( permissions != null )
{
permissions.remove( permission );
}
}
public Set<Permission> getPermissions()
{
return permissions;
}
public void setPermissions( final Set<Permission> permissions )
{
this.permissions = permissions;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals( final Object obj )
{
if ( this == obj )
{
return true;
}
if ( obj == null )
{
return false;
}
if ( getClass() != obj.getClass() )
{
return false;
}
final Role other = (Role) obj;
if ( !name.equals( other.name ) )
{
return false;
}
return true;
}
public Role updateFrom( final Role role )
{
this.permissions = role.getPermissions();
return this;
}
}