// Path: src/main/java/com/plexobject/rbac/domain/Subject.java
// @Entity
// @XmlRootElement
// public class Subject extends PersistentObject implements Validatable,
//         Identifiable<String> {
//     public static final Subject SUPER_ADMIN = new Subject(Configuration
//             .getInstance()
//             .getProperty("super_admin_subjectName", "super_admin"),
//             PasswordUtils.getHash(Configuration.getInstance().getProperty(
//                     "super_admin_credentials", "changeme")));
//     @PrimaryKey
//     private String id;
//     private String credentials;
// 
//     // for JPA
//     Subject() {
//     }
// 
//     @XmlElement
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         if (GenericValidator.isBlankOrNull(id)) {
//             throw new IllegalArgumentException("subjectName not specified");
//         }
// 
//         this.id = id;
//     }
// 
//     public Subject(final String id, final String credentials) {
//         setId(id);
//         setCredentials(credentials);
//     }
// 
//     public void setCredentials(String credentials) {
//         this.credentials = credentials;
//     }
// 
//     public String getCredentials() {
//         return credentials;
//     }
// 
//     /**
//      * @see java.lang.Object#equals(Object)
//      */
//     @Override
//     public boolean equals(Object object) {
//         if (!(object instanceof Subject)) {
//             return false;
//         }
//         Subject rhs = (Subject) 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("subjectName", this.id)
//                 .toString();
//     }
// 
//     @Override
//     public void validate() throws ValidationException {
//         final Map<String, String> errorsByField = new HashMap<String, String>();
//         if (GenericValidator.isBlankOrNull(id)) {
//             errorsByField.put("id", "subjectName is not specified");
//         }
// 
//         if (errorsByField.size() > 0) {
//             throw new ValidationException(errorsByField);
//         }
//     }
// 
// }


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



public interface SubjectsService {
    Response get(String domain, String subjectName);

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

// Path: src/main/java/com/plexobject/rbac/domain/Subject.java
// @Entity
// @XmlRootElement
// public class Subject extends PersistentObject implements Validatable,
//         Identifiable<String> {
//     public static final Subject SUPER_ADMIN = new Subject(Configuration
//             .getInstance()
//             .getProperty("super_admin_subjectName", "super_admin"),
//             PasswordUtils.getHash(Configuration.getInstance().getProperty(
//                     "super_admin_credentials", "changeme")));
//     @PrimaryKey
//     private String id;
//     private String credentials;
// 
//     // for JPA
//     Subject() {
//     }
// 
//     @XmlElement
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         if (GenericValidator.isBlankOrNull(id)) {
//             throw new IllegalArgumentException("subjectName not specified");
//         }
// 
//         this.id = id;
//     }
// 
//     public Subject(final String id, final String credentials) {
//         setId(id);
//         setCredentials(credentials);
//     }
// 
//     public void setCredentials(String credentials) {
//         this.credentials = credentials;
//     }
// 
//     public String getCredentials() {
//         return credentials;
//     }
// 
//     /**
//      * @see java.lang.Object#equals(Object)
//      */
//     @Override
//     public boolean equals(Object object) {
//         if (!(object instanceof Subject)) {
//             return false;
//         }
//         Subject rhs = (Subject) 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("subjectName", this.id)
//                 .toString();
//     }
// 
//     @Override
//     public void validate() throws ValidationException {
//         final Map<String, String> errorsByField = new HashMap<String, String>();
//         if (GenericValidator.isBlankOrNull(id)) {
//             errorsByField.put("id", "subjectName is not specified");
//         }
// 
//         if (errorsByField.size() > 0) {
//             throw new ValidationException(errorsByField);
//         }
//     }
// 
// }


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

package com.plexobject.rbac.service;



public interface SubjectsService {
    Response get(String domain, String subjectName);

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

    Response put(String domain, Subject subject);