package com.instructure.canvasapi.model;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* @author Josh Ruesch
*
* Copyright (c) 2014 Instructure. All rights reserved.
*/
public class DiscussionTopic implements Parcelable, Serializable {
private static final long serialVersionUID = 1L;
//The user can't see it unless they post a high level reply (requireinitialpost).
private boolean forbidden = false;
//List of all the ids of the unread discussion entries.
private List<Long> unread_entries = new ArrayList<Long>();
//List of the participants.
private List<DiscussionParticipant> participants = new ArrayList<DiscussionParticipant>();
private HashMap<Long, DiscussionParticipant> participantsMap = new HashMap<Long, DiscussionParticipant>();
private HashMap<Long, Boolean> unread_entriesMap = new HashMap<Long, Boolean>();
private HashMap<Long, Integer> entry_ratings = new HashMap<>();
//List of all the discussion entries (views)
private List<DiscussionEntry> view = new ArrayList<>();
///////////////////////////////////////////////////////////////////////////
// Getters and Setters
///////////////////////////////////////////////////////////////////////////
public boolean isForbidden() {
return forbidden;
}
public void setForbidden(boolean forbidden) {
this.forbidden = forbidden;
}
//This should only have to get built once.
// //MUCH faster for lookups.
//So instead of n linear operations, we have 1 linear operations and (n-1) constant ones.
public HashMap<Long,Boolean> getUnread_entriesMap(){
if (unread_entries.size() != unread_entriesMap.size()) {
for (Long unreadEntry : unread_entries) {
unread_entriesMap.put(unreadEntry, true);
}
}
return unread_entriesMap;
}
public List<Long> getUnreadEntries() {
return unread_entries;
}
//This should only have to get built once.
//MUCH faster for lookups.
//So instead of n linear operations, we have 1 linear operations and (n-1) constant ones.
public HashMap<Long,DiscussionParticipant> getParticipantsMap(){
if(participantsMap == null || participantsMap.isEmpty()){
participantsMap = new HashMap<Long, DiscussionParticipant>();
if(participants != null){
for(DiscussionParticipant discussionParticipant : participants){
participantsMap.put(discussionParticipant.getId(), discussionParticipant);
}
}
}
return participantsMap;
}
public void setUnreadEntries(List<Long> unread_entries) {
this.unread_entries = unread_entries;
}
public List<DiscussionParticipant> getParticipants() {
return participants;
}
public void setParticipants(List<DiscussionParticipant> participants) {
this.participants = participants;
}
public List<DiscussionEntry> getViews() {
return view;
}
public void setViews(List<DiscussionEntry> views) {
this.view = views;
}
public HashMap<Long, Integer> getEntryRatings() {
return entry_ratings;
}
public void setEntryRatings(HashMap<Long, Integer> entry_ratings) {
this.entry_ratings = entry_ratings;
}
///////////////////////////////////////////////////////////////////////////
// Constructors
///////////////////////////////////////////////////////////////////////////
public DiscussionTopic() {}
///////////////////////////////////////////////////////////////////////////
// Helpers
///////////////////////////////////////////////////////////////////////////
public static String getDiscussionURL(String api_protocol,String domain, long courseId, long topicId) {
//https://mobiledev.instructure.com/api/v1/courses/24219/discussion_topics/1129998/
return api_protocol + "://" + domain + "/courses/"+courseId+"/discussion_topics/"+topicId;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByte(forbidden ? (byte) 1 : (byte) 0);
dest.writeList(this.unread_entries);
dest.writeList(this.participants);
dest.writeSerializable(this.participantsMap);
dest.writeSerializable(this.unread_entriesMap);
dest.writeList(this.view);
dest.writeSerializable(this.entry_ratings);
}
private DiscussionTopic(Parcel in) {
this.forbidden = in.readByte() != 0;
in.readList(this.unread_entries, Long.class.getClassLoader());
in.readList(this.participants, DiscussionParticipant.class.getClassLoader());
this.participantsMap = (HashMap<Long, DiscussionParticipant>)in.readSerializable();
this.unread_entriesMap = (HashMap<Long, Boolean>)in.readSerializable();
in.readList(this.view, DiscussionEntry.class.getClassLoader());
this.entry_ratings = (HashMap<Long, Integer>)in.readSerializable();
}
public static Creator<DiscussionTopic> CREATOR = new Creator<DiscussionTopic>() {
public DiscussionTopic createFromParcel(Parcel source) {
return new DiscussionTopic(source);
}
public DiscussionTopic[] newArray(int size) {
return new DiscussionTopic[size];
}
};
}