package elw.dao.ctx;
import elw.dao.Nav;
import elw.vo.*;
import java.util.Iterator;
import java.util.Map;
/**
* Parameter Object, storing the full enrollment context.
*/
public class CtxStudent extends CtxEnrollment {
public final Student student;
public final Iterable<CtxTask> tasks;
public CtxStudent(
Enrollment enr, Course course,
Group group, Student student
) {
super(enr, course, group);
this.student = student;
this.tasks = new Iterable<CtxTask>() {
public Iterator<CtxTask> iterator() {
final Iterator<Map.Entry<String, IndexEntry>> indexIterator =
CtxStudent.this.enr.getIndex().entrySet().iterator();
return new Iterator<CtxTask>() {
public boolean hasNext() {
return indexIterator.hasNext();
}
public CtxTask next() {
return task(indexIterator.next().getKey());
}
public void remove() {
indexIterator.remove();
}
};
}
};
}
// LATER use IndexEntry reference instead of indexKey
public CtxTask task(final String indexKey) {
final IndexEntry indexEntry = enr.getIndex().get(indexKey);
final String taskTypeId = indexEntry.getTaskTypeId();
final String taskId = indexEntry.getTaskId();
final TaskType taskType = course.getTaskTypes().get(taskTypeId);
final Task task = taskType.getTasks().get(taskId);
final Version ver = Nav.resolveVersion(
task, indexEntry, group, student.getId()
);
final CtxTask ctxTask = new CtxTask(
enr, course, group, student,
indexEntry, task, taskType, ver
);
return propagateTZCache(ctxTask);
}
}