package com.taskadapter.redmineapi.bean; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; /** * User or group membership. */ public class Membership implements Identifiable { private final PropertyStorage storage; /** * database numeric ID. */ public final static Property<Integer> DATABASE_ID = new Property<>(Integer.class, "id"); public final static Property<Project> PROJECT = new Property<>(Project.class, "project"); /** * User. Not set for "group" membership. */ public final static Property<Integer> USER_ID = new Property<>(Integer.class, "userId"); public final static Property<String> USER_NAME = new Property<>(String.class, "userName"); /** * Group. Not set for "user" membership. */ public final static Property<Integer> GROUP_ID = new Property<>(Integer.class, "groupId"); public final static Property<String> GROUP_NAME = new Property<>(String.class, "groupName"); public final static Property<Set<Role>> ROLES = (Property<Set<Role>>) new Property(Set.class, "roles"); /** * Use MembershipFactory to create instances of this class. * * @param id database ID. * * @see com.taskadapter.redmineapi.bean.MembershipFactory */ Membership(Integer id) { storage = new PropertyStorage(); storage.set(ROLES, new HashSet<>()); storage.set(DATABASE_ID, id); } @Override public Integer getId() { return storage.get(DATABASE_ID); } public Project getProject() { return storage.get(PROJECT); } public void setProject(Project project) { storage.set(PROJECT, project); } public Integer getUserId() { return storage.get(USER_ID); } public void setUserId(Integer id) { storage.set(USER_ID, id); } public Integer getGroupId() { return storage.get(GROUP_ID); } public void setGroupId(Integer id) { storage.set(GROUP_ID, id); } public String getUserName() { return storage.get(USER_NAME); } public void setUserName(String id) { storage.set(USER_NAME, id); } public String getGroupName() { return storage.get(GROUP_NAME); } public void setGroupName(String id) { storage.set(GROUP_NAME, id); } public Collection<Role> getRoles() { return Collections.unmodifiableCollection(storage.get(ROLES)); } public void addRoles(Collection<Role> roles) { storage.get(ROLES).addAll(roles); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Membership that = (Membership) o; if (getId() != null ? !getId().equals(that.getId()) : that.getId() != null) return false; return true; } @Override public int hashCode() { return getId() != null ? getId().hashCode() : 0; } @Override public String toString() { return "Membership [id=" + getId() + ", project=" + getProject() + ", userId=" + getUserId() + ", groupId=" + getGroupId() + ", roles=" + getRoles() + "]"; } public PropertyStorage getStorage() { return storage; } }