// Copyright (c) 2003-2013, LogMeIn, Inc. All rights reserved. // This is part of Xively4J library, it is under the BSD 3-Clause license. package com.xively.client.model; import java.util.Collection; import java.util.Collections; import com.xively.client.utils.CollectionUtil; import com.xively.client.utils.ObjectUtil; import org.codehaus.jackson.annotate.JsonCreator; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonRootName; /** * Permission model, accessible from {@link ApiKey}. * * Value object. * * @author spau * */ @JsonRootName("permissions") public class Permission { public enum AccessMethod { delete, get, post, put; } @JsonProperty("source_ip") private String sourceIp; // private String referer; // private Integer minimumInterval; // private String label; @JsonProperty("access_methods") private Collection<AccessMethod> accessMethods; @JsonProperty("resources") private Collection<Resource> resources; @JsonCreator public Permission(@JsonProperty("source_ip") String sourceIp, @JsonProperty("access_methods") Collection<AccessMethod> accessMethods, @JsonProperty("resources") Collection<Resource> resources) { this.sourceIp = sourceIp; this.accessMethods = accessMethods == null ? null : Collections.unmodifiableCollection(accessMethods); this.resources = resources == null ? null : Collections.unmodifiableCollection(resources); } public Collection<AccessMethod> getAccessMethods() { return accessMethods; } public String getSourceIp() { return sourceIp; } public Collection<Resource> getResources() { return resources; } @JsonIgnore @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (this == obj) { return true; } if (!(obj instanceof Permission)) { return false; } Permission other = (Permission) obj; if (!ObjectUtil.nullCheckEquals(this.sourceIp, other.sourceIp)) { return false; } if (!CollectionUtil.deepEquals(this.accessMethods, other.accessMethods)) { return false; } if (!CollectionUtil.deepEquals(this.resources, other.resources)) { return false; } return true; } @JsonIgnore @Override public int hashCode() { int retval = 1; retval += sourceIp == null ? 0 : sourceIp.hashCode() * 37; retval += accessMethods == null ? 0 : accessMethods.hashCode() * 37; retval += resources == null ? 0 : resources.hashCode() * 37; return retval; } }