/*
* (c) Copyright Reserved EVRYTHNG Limited 2016. All rights reserved.
* Use of this material is subject to license.
* Copying and unauthorised use of this material strictly prohibited.
*/
package com.evrythng.thng.resource.model.core;
import org.apache.commons.collections.list.SetUniqueList;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* Holds the scopes for a resource.
*/
public class ScopeResource implements Serializable {
public static final String ALL_USERS = "allU";
public static final String ALL_PROJECTS = "allP";
private static final long serialVersionUID = -1514722768762632206L;
private List<String> users;
private List<String> projects;
public static final ScopeResource EMPTY = new ScopeResource();
public ScopeResource() {
users = new ArrayList<>();
projects = new ArrayList<>();
}
public ScopeResource(final List<String> users, final List<String> projects) {
this.users = users;
this.projects = projects;
}
public List<String> getUsers() {
return users;
}
public void setUsers(final List<String> users) {
this.users = users != null ? SetUniqueList.decorate(new ArrayList(users)) : null;
}
public List<String> getProjects() {
return projects;
}
public void setProjects(final List<String> projects) {
this.projects = projects != null ? SetUniqueList.decorate(new ArrayList(projects)) : null;
}
@Override
public boolean equals(final Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
ScopeResource that = (ScopeResource) other;
if (projects != null && that.projects != null) {
if (projects.size() != that.projects.size() || !projects.containsAll(that.projects)){
return false;
}
}
if (projects != null && that.projects == null || projects == null && that.projects != null) {
return false;
}
if (users != null && that.users != null) {
if (users.size() != that.users.size() || !users.containsAll(that.users)){
return false;
}
}
if (users != null && that.users == null || users == null && that.users != null) {
return false;
}
return true;
}
@Override
public int hashCode() {
int result = users != null ? users.hashCode() : 0;
result = 31 * result + (projects != null ? projects.hashCode() : 0);
return result;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("projects=").append(projects);
sb.append(", users=").append(users);
sb.append('}');
return sb.toString();
}
}