package com.instructure.canvasapi.model; import android.os.Parcel; import android.os.Parcelable; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author Josh Ruesch * * Copyright (c) 2014 Instructure. All rights reserved. */ public class User extends CanvasContext{ private long id; private String name; private String short_name; private String login_id; private String avatar_url; private String primary_email; private String sortable_name; private String bio; private List<Enrollment> enrollments = new ArrayList<Enrollment>(); //Helper variable for the "specified" enrollment. private int enrollmentIndex; /////////////////////////////////////////////////////////////////////////// // Required Overrides /////////////////////////////////////////////////////////////////////////// @Override public Date getComparisonDate() { return null; } @Override public String getComparisonString() { return getName(); } /////////////////////////////////////////////////////////////////////////// // Getters and Setters /////////////////////////////////////////////////////////////////////////// @Override public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } @Override public Type getType() { return Type.USER; } public void setName(String name) { this.name = name; } public String getShortName() { return short_name; } public void setShortName(String shortName) { this.short_name = shortName; } public String getLoginId() { return login_id; } public void setLoginId(String loginId) { this.login_id = loginId; } public String getAvatarURL() { return avatar_url; } public void setAvatarURL(String avatar) { this.avatar_url = avatar; } public String getEmail() { return primary_email; } public void setEmail(String email) { this.primary_email = email; } public List<Enrollment> getEnrollments() { return enrollments; } public void setEnrollments(ArrayList<Enrollment> enrollments) { this.enrollments = enrollments; } public int getEnrollmentIndex(){ return enrollmentIndex; } public void setEnrollmentIndex(int index){ enrollmentIndex = index; } public String getSortableName(){ return sortable_name; } public void setSortableName(String sortable_name){ this.sortable_name = sortable_name; } public String getBio() { return bio; } // User Permissions - defaults to false, returned with UserAPI.getSelfWithPermissions() public boolean canUpdateAvatar(){ return getPermissions() != null && getPermissions().canUpdateAvatar(); } public boolean canUpdateName(){ return getPermissions() != null && getPermissions().canUpdateName(); } // Matches recipents common_courses or common_groups format public HashMap<String, String[]> getEnrollmentsHash() { HashMap<String, List<String>> enrollments = new HashMap<>(); for (Enrollment enrollment: getEnrollments()) { String key = enrollment.getCourseId() + ""; if (enrollments.containsKey(key)) { enrollments.get(key).add(enrollment.getRole()); } else { List<String> newList = new ArrayList<>(); newList.add(enrollment.getRole()); enrollments.put(key, newList); } } HashMap<String, String[]> stringArrayEnrollments = new HashMap<>(); for (Map.Entry<String, List<String>> entry : enrollments.entrySet()) { stringArrayEnrollments.put(entry.getKey(), entry.getValue().toArray(new String[entry.getValue().size()])); } return stringArrayEnrollments; } /////////////////////////////////////////////////////////////////////////// // Constructors /////////////////////////////////////////////////////////////////////////// public User() {} public User(long id) { this.id = id; } /////////////////////////////////////////////////////////////////////////// // Overrides /////////////////////////////////////////////////////////////////////////// @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (id ^ (id >>> 32)); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } User other = (User) obj; if (id != other.id) { return false; } return true; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeLong(this.id); dest.writeString(this.name); dest.writeString(this.short_name); dest.writeString(this.login_id); dest.writeString(this.avatar_url); dest.writeString(this.primary_email); dest.writeList(this.enrollments); dest.writeInt(this.enrollmentIndex); dest.writeString(this.sortable_name); dest.writeString(this.bio); dest.writeParcelable(this.permissions, flags); } private User(Parcel in) { this.id = in.readLong(); this.name = in.readString(); this.short_name = in.readString(); this.login_id = in.readString(); this.avatar_url = in.readString(); this.primary_email = in.readString(); in.readList(this.enrollments, Enrollment.class.getClassLoader()); this.enrollmentIndex = in.readInt(); this.sortable_name = in.readString(); this.bio = in.readString(); this.permissions = in.readParcelable(CanvasContextPermission.class.getClassLoader()); } public static Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { public User createFromParcel(Parcel source) { return new User(source); } public User[] newArray(int size) { return new User[size]; } }; @Override public int compareTo(CanvasContext canvasContext) { return 0; } }