package jackrabbit;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.CompareToBuilder;
public final class PermissionKey implements Comparable<PermissionKey> {
private final String workspace;
private final String principal;
private final String id;
private final int hashCode;
public PermissionKey(String workspace, String principal, String id) {
this.workspace = workspace;
this.principal = principal;
this.id = id;
// Hash code will be used *very* often, and will never change
this.hashCode = generateHashCode();
}
public String getWorkspace() {
return workspace;
}
public String getPrincipal() {
return principal;
}
public String getId() {
return id;
}
@Override
public int hashCode() {
return hashCode;
}
private int generateHashCode() {
return (new HashCodeBuilder(17,23))
.append(workspace)
.append(principal)
.append(id)
.toHashCode();
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public String toString() {
return String.format("workspace %s, principal %s, itemid %s", workspace, principal, id);
}
@Override
public int compareTo(PermissionKey o) {
return new CompareToBuilder()
.append(getWorkspace(), o.getWorkspace())
.append(getPrincipal(), o.getPrincipal())
.append(getId(), o.getId())
.build();
}
}