package models;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;
import uk.bl.Const;
import com.avaje.ebean.Page;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
@Table(name = "permission")
public class Permission extends ActModel {
/**
*
*/
private static final long serialVersionUID = -2250099575468302989L;
@JoinTable(name = "permission_role", joinColumns = { @JoinColumn(name = "permission_id", referencedColumnName="id") },
inverseJoinColumns = { @JoinColumn(name = "role_id", referencedColumnName="id") })
@ManyToMany
@JsonIgnore
public List<Role> roles;
@Required(message="Name is required")
@Column(columnDefinition = "text")
public String name;
@JsonIgnore
@Column(columnDefinition = "text")
public String description;
@JsonIgnore
@Column(columnDefinition = "text")
public String revision;
public static final Model.Finder<Long, Permission> find = new Model.Finder<Long, Permission>(Long.class, Permission.class);
/**
* Retrieve all permissions.
*/
public static List<Permission> findAll() {
return find.where().orderBy("name asc").findList();
}
/**
* Retrieve an object by Id (id).
* @param nid
* @return object
*/
public static Permission findById(Long id) {
Permission res = find.where().eq(Const.ID, id).findUnique();
return res;
}
public static Permission findByName(String name) {
return find.where().eq("name", name).findUnique();
}
/**
* This method filters permissions by name and returns a list of filtered Permission objects.
* @param name
* @return
*/
public static List<Permission> filterByName(String name) {
return find.where().icontains(Const.NAME, name).findList();
}
/**
* Return a page of Permissions
*
* @param page Page to display
* @param pageSize Number of Permissions per page
* @param sortBy User property used for sorting
* @param order Sort order (either or asc or desc)
* @param filter Filter applied on the name column
*/
public static Page<Permission> page(int page, int pageSize, String sortBy, String order, String filter) {
return find.where().icontains("name", filter)
.orderBy(sortBy + " " + order)
.findPagingList(pageSize)
.setFetchAhead(false)
.getPage(page);
}
public static Map<String, Boolean> options(List<Permission> myPermissions) {
Map<String, Boolean> permissionsMap = new HashMap<String, Boolean>();
for (Permission permission : Permission.findAll()) {
permissionsMap.put(permission.name, (myPermissions != null && myPermissions.contains(permission)));
}
return permissionsMap;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
Permission other = (Permission) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Permission [name=" + name + ", description=" + description
+ "]";
}
}