package com.instructure.canvasapi.model;
import android.os.Parcel;
import android.util.Log;
import com.instructure.canvasapi.utilities.APIHelpers;
import com.instructure.canvasapi.utilities.TestHelpers;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created by Brady Larson on 9/6/13.
*
* Copyright (c) 2014 Instructure. All rights reserved.
*/
public class LockedModule extends CanvasComparable<LockedModule> implements Serializable{
private static final long serialVersionUID = 1L;
private long id;
private long context_id;
private String context_type;
private String name;
private String unlock_at;
private boolean require_sequential_progress;
private List<ModuleName> prerequisites = new ArrayList<>();
private List<ModuleCompletionRequirement> completion_requirements = new ArrayList<>();
///////////////////////////////////////////////////////////////////////////
// Getters and Setters
///////////////////////////////////////////////////////////////////////////
@Override
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getContextType() {
return context_type;
}
public void setContextType(String context_type) {
this.context_type = context_type;
}
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
public boolean isRequireSequentialProgress() {
return require_sequential_progress;
}
public void setRequireSequentialProgress(boolean require_sequential_progress) {
this.require_sequential_progress = require_sequential_progress;
}
public List<ModuleName> getPrerequisites() {
return prerequisites;
}
public Date getUnlock_at() {
return APIHelpers.stringToDate(unlock_at);
}
public long getContext_id() {
return context_id;
}
public List<ModuleCompletionRequirement> getCompletionRequirements() {
return completion_requirements;
}
public void setCompletionRequirements(List<ModuleCompletionRequirement> completion_requirements) {
this.completion_requirements = completion_requirements;
}
//Module Name
private class ModuleName implements Serializable {
private static final long serialVersionUID = 1L;
private String getName() {
return name;
}
private void setName(String name) {
this.name = name;
}
private String name;
}
///////////////////////////////////////////////////////////////////////////
// Required Overrides
///////////////////////////////////////////////////////////////////////////
@Override
public Date getComparisonDate() {
return null;
}
@Override
public String getComparisonString() {
return getName();
}
///////////////////////////////////////////////////////////////////////////
// Unit Tests
///////////////////////////////////////////////////////////////////////////
public static boolean isLockedModuleValid(LockedModule lockedModule) {
if(lockedModule.getContext_id() <= 0) {
Log.d(TestHelpers.UNIT_TEST_TAG, "Invalid LockedModule id");
return false;
}
if(lockedModule.getName() == null) {
Log.d(TestHelpers.UNIT_TEST_TAG, "Invalid LockedModule name");
return false;
}
if(lockedModule.getUnlock_at() == null) {
Log.d(TestHelpers.UNIT_TEST_TAG, "Invalid LockedModule unlock date");
return false;
}
if(lockedModule.getPrerequisites() == null) {
Log.d(TestHelpers.UNIT_TEST_TAG, "Invalid LockedModule prerequisites");
return false;
}
for(int i = 0; i < lockedModule.getPrerequisites().size(); i++) {
if(lockedModule.getPrerequisites().get(i).getName() == null) {
Log.d(TestHelpers.UNIT_TEST_TAG, "Invalid LockedModule prereq name");
return false;
}
}
return true;
}
///////////////////////////////////////////////////////////////////////////
// Constructors
///////////////////////////////////////////////////////////////////////////
public LockedModule() {}
private LockedModule(Parcel in) {
in.readList(this.getPrerequisites(), ModuleName.class.getClassLoader());
this.unlock_at = in.readString();
this.name = in.readString();
this.context_id = in.readLong();
this.id = in.readLong();
this.context_type = in.readString();
this.require_sequential_progress = in.readByte() != 0;
in.readList(this.getCompletionRequirements(), ModuleCompletionRequirement.class.getClassLoader());
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeList(this.prerequisites);
dest.writeString(this.unlock_at);
dest.writeString(this.name);
dest.writeLong(this.context_id);
dest.writeLong(this.id);
dest.writeString(this.context_type);
dest.writeByte(this.require_sequential_progress ? (byte) 1 : (byte) 0);
dest.writeList(this.completion_requirements);
}
public static Creator<LockedModule> CREATOR = new Creator<LockedModule>() {
public LockedModule createFromParcel(Parcel source) {
return new LockedModule(source);
}
public LockedModule[] newArray(int size) {
return new LockedModule[size];
}
};
}