public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }

        if (obj == null || this.getClass() != obj.getClass()) {
            return false;
        }

        Result otherResult = (Result) obj;

        boolean statsEqual;
        if (status == null) {
            if (otherResult.getStatus() == null) {
                statsEqual = true;
            } else {
                statsEqual = false;
            }
        } else {
            statsEqual = status.equals(otherResult.getStatus());
        }

        return decision == otherResult.getDecision() && Strings.safeEquals(resourceId, otherResult.getResourceId())
                && obligations.equals(otherResult.getObligations()) && statsEqual;
    }