package com.plexobject.rbac.domain; import java.util.HashMap; import java.util.Map; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.validator.GenericValidator; import com.plexobject.rbac.Configuration; import com.plexobject.rbac.utils.PasswordUtils; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; /** * This class defines a simple subject class Note: This project does not deal * with authentication and recommends openid solutions for it (such as RPX) * * @author bhatti_shahzad * */ @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); } } }