// Path: src/main/java/com/plexobject/rbac/domain/Role.java
// @Entity
// @XmlRootElement
// public class Role extends PersistentObject implements Validatable,
//         Identifiable<String> {
//     public static final Role ANONYMOUS = new Role("anonymous");
//     public static final Role SUPER_ADMIN = new Role("super_admin");
// 
//     @PrimaryKey
//     private String id;
// 
//     @SecondaryKey(relate = Relationship.MANY_TO_MANY, relatedEntity = Role.class)
//     Set<String> parentIds = new HashSet<String>();
// 
//     @SecondaryKey(relate = Relationship.MANY_TO_MANY, relatedEntity = Subject.class, onRelatedEntityDelete = DeleteAction.NULLIFY)
//     Set<String> subjectIds = new HashSet<String>();
// 
//     Role() {
//     }
// 
//     public Role(String id) {
//         this(id, (Role) null);
//     }
// 
//     public Role(String id, Role parent) {
//         setId(id);
//         if (parent != null) {
//             addParentId(parent.getId());
//         } else if (ANONYMOUS != null) {
//             addParentId(ANONYMOUS.getId());
//         }
//     }
// 
//     public Role(String id, Set<String> parentIds) {
//         setId(id);
//         if (parentIds != null && parentIds.size() > 0) {
//             setParentIds(parentIds);
//         } else {
//             addParentId(ANONYMOUS.getId());
//         }
//     }
// 
//     @XmlElement
//     public String getId() {
//         return id;
//     }
// 
//     void setId(String id) {
//         this.id = id;
//     }
// 
//     @XmlTransient
//     public Set<String> getSubjectIds() {
//         return new HashSet<String>(subjectIds);
//     }
// 
//     public void setSubjectIds(Set<String> subjectIds) {
//         firePropertyChange("subjectIds", this.subjectIds, subjectIds);
// 
//         this.subjectIds.clear();
//         this.subjectIds.addAll(subjectIds);
//     }
// 
//     public void addSubject(String subjectName) {
//         Set<String> old = getSubjectIds();
//         this.subjectIds.add(subjectName);
//         firePropertyChange("subjectIds", old, this.subjectIds);
// 
//     }
// 
//     public void removeSubject(String subjectName) {
//         Set<String> old = getSubjectIds();
//         this.subjectIds.remove(subjectName);
//         firePropertyChange("subjectIds", old, this.subjectIds);
//     }
// 
//     public void addSubject(Subject subject) {
//         addSubject(subject.getId());
//     }
// 
//     public void removeSubject(Subject subject) {
//         removeSubject(subject.getId());
//     }
// 
//     @XmlElement
//     public Set<String> getParentIds() {
//         return new HashSet<String>(parentIds);
//     }
// 
//     public boolean hasParentIds() {
//         return parentIds != null && parentIds.size() > 0;
//     }
// 
//     public void setParentIds(Set<String> parentIds) {
//         firePropertyChange("parentIds", this.parentIds, parentIds);
// 
//         this.parentIds.clear();
//         this.parentIds.addAll(parentIds);
//     }
// 
//     public void addParentId(String parentId) {
//         Set<String> old = getParentIds();
//         this.parentIds.add(parentId);
//         firePropertyChange("parentIds", old, this.parentIds);
// 
//     }
// 
//     public void removeParentId(String parentId) {
//         Set<String> old = getParentIds();
//         this.parentIds.remove(parentId);
//         firePropertyChange("parentIds", old, this.parentIds);
//     }
// 
//     public void addParentId(Role parent) {
//         addParentId(parent.getId());
//     }
// 
//     public void removeParentId(Role parent) {
//         removeParentId(parent.getId());
//     }
// 
//     /**
//      * @see java.lang.Object#equals(Object)
//      */
//     @Override
//     public boolean equals(Object object) {
//         if (!(object instanceof Role)) {
//             return false;
//         }
//         Role rhs = (Role) object;
//         return new EqualsBuilder().append(this.id, rhs.id).isEquals();
//     }
// 
//     /**
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder(786529047, 1924536713).append(this.id)
//                 .toHashCode();
//     }
// 
//     /**
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return new ToStringBuilder(this).append("rolename", this.id).append(
//                 "subjectIds", this.subjectIds).append("parentIds",
//                 this.parentIds).toString();
//     }
// 
//     @Override
//     public void validate() throws ValidationException {
//         final Map<String, String> errorsByField = new HashMap<String, String>();
//         if (GenericValidator.isBlankOrNull(id)) {
//             errorsByField.put("id", "rolename is not specified");
//         }
//         if ((parentIds == null || parentIds.size() == 0)
//                 && !ANONYMOUS.getId().equals(id)) {
//             addParentId(ANONYMOUS.getId());
//         }
//         if (errorsByField.size() > 0) {
//             throw new ValidationException(errorsByField);
//         }
//     }
// 
// }


import javax.ws.rs.core.Response;
import com.plexobject.rbac.domain.Role;
package com.plexobject.rbac.service;



public interface RolesService {
    Response get(String domain, String rolename);

    Response index(String domain, String lastKey, int limit);

// Path: src/main/java/com/plexobject/rbac/domain/Role.java
// @Entity
// @XmlRootElement
// public class Role extends PersistentObject implements Validatable,
//         Identifiable<String> {
//     public static final Role ANONYMOUS = new Role("anonymous");
//     public static final Role SUPER_ADMIN = new Role("super_admin");
// 
//     @PrimaryKey
//     private String id;
// 
//     @SecondaryKey(relate = Relationship.MANY_TO_MANY, relatedEntity = Role.class)
//     Set<String> parentIds = new HashSet<String>();
// 
//     @SecondaryKey(relate = Relationship.MANY_TO_MANY, relatedEntity = Subject.class, onRelatedEntityDelete = DeleteAction.NULLIFY)
//     Set<String> subjectIds = new HashSet<String>();
// 
//     Role() {
//     }
// 
//     public Role(String id) {
//         this(id, (Role) null);
//     }
// 
//     public Role(String id, Role parent) {
//         setId(id);
//         if (parent != null) {
//             addParentId(parent.getId());
//         } else if (ANONYMOUS != null) {
//             addParentId(ANONYMOUS.getId());
//         }
//     }
// 
//     public Role(String id, Set<String> parentIds) {
//         setId(id);
//         if (parentIds != null && parentIds.size() > 0) {
//             setParentIds(parentIds);
//         } else {
//             addParentId(ANONYMOUS.getId());
//         }
//     }
// 
//     @XmlElement
//     public String getId() {
//         return id;
//     }
// 
//     void setId(String id) {
//         this.id = id;
//     }
// 
//     @XmlTransient
//     public Set<String> getSubjectIds() {
//         return new HashSet<String>(subjectIds);
//     }
// 
//     public void setSubjectIds(Set<String> subjectIds) {
//         firePropertyChange("subjectIds", this.subjectIds, subjectIds);
// 
//         this.subjectIds.clear();
//         this.subjectIds.addAll(subjectIds);
//     }
// 
//     public void addSubject(String subjectName) {
//         Set<String> old = getSubjectIds();
//         this.subjectIds.add(subjectName);
//         firePropertyChange("subjectIds", old, this.subjectIds);
// 
//     }
// 
//     public void removeSubject(String subjectName) {
//         Set<String> old = getSubjectIds();
//         this.subjectIds.remove(subjectName);
//         firePropertyChange("subjectIds", old, this.subjectIds);
//     }
// 
//     public void addSubject(Subject subject) {
//         addSubject(subject.getId());
//     }
// 
//     public void removeSubject(Subject subject) {
//         removeSubject(subject.getId());
//     }
// 
//     @XmlElement
//     public Set<String> getParentIds() {
//         return new HashSet<String>(parentIds);
//     }
// 
//     public boolean hasParentIds() {
//         return parentIds != null && parentIds.size() > 0;
//     }
// 
//     public void setParentIds(Set<String> parentIds) {
//         firePropertyChange("parentIds", this.parentIds, parentIds);
// 
//         this.parentIds.clear();
//         this.parentIds.addAll(parentIds);
//     }
// 
//     public void addParentId(String parentId) {
//         Set<String> old = getParentIds();
//         this.parentIds.add(parentId);
//         firePropertyChange("parentIds", old, this.parentIds);
// 
//     }
// 
//     public void removeParentId(String parentId) {
//         Set<String> old = getParentIds();
//         this.parentIds.remove(parentId);
//         firePropertyChange("parentIds", old, this.parentIds);
//     }
// 
//     public void addParentId(Role parent) {
//         addParentId(parent.getId());
//     }
// 
//     public void removeParentId(Role parent) {
//         removeParentId(parent.getId());
//     }
// 
//     /**
//      * @see java.lang.Object#equals(Object)
//      */
//     @Override
//     public boolean equals(Object object) {
//         if (!(object instanceof Role)) {
//             return false;
//         }
//         Role rhs = (Role) object;
//         return new EqualsBuilder().append(this.id, rhs.id).isEquals();
//     }
// 
//     /**
//      * @see java.lang.Object#hashCode()
//      */
//     @Override
//     public int hashCode() {
//         return new HashCodeBuilder(786529047, 1924536713).append(this.id)
//                 .toHashCode();
//     }
// 
//     /**
//      * @see java.lang.Object#toString()
//      */
//     @Override
//     public String toString() {
//         return new ToStringBuilder(this).append("rolename", this.id).append(
//                 "subjectIds", this.subjectIds).append("parentIds",
//                 this.parentIds).toString();
//     }
// 
//     @Override
//     public void validate() throws ValidationException {
//         final Map<String, String> errorsByField = new HashMap<String, String>();
//         if (GenericValidator.isBlankOrNull(id)) {
//             errorsByField.put("id", "rolename is not specified");
//         }
//         if ((parentIds == null || parentIds.size() == 0)
//                 && !ANONYMOUS.getId().equals(id)) {
//             addParentId(ANONYMOUS.getId());
//         }
//         if (errorsByField.size() > 0) {
//             throw new ValidationException(errorsByField);
//         }
//     }
// 
// }


// Path: src/main/java/com/plexobject/rbac/service/RolesService.java
import javax.ws.rs.core.Response;
import com.plexobject.rbac.domain.Role;

package com.plexobject.rbac.service;



public interface RolesService {
    Response get(String domain, String rolename);

    Response index(String domain, String lastKey, int limit);

    Response put(String domain, Role role);