package elw.dao;
import elw.vo.*;
import elw.vo.Class;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.Days;
import java.util.*;
import static elw.vo.IdNamed._.resolve;
/**
* Common object resolution/navigation logic.
*/
public class Nav {
public static Student findStudent(
final Group group,
final String authId
) {
for (Student student : group.getStudents().values()) {
if (authId.equalsIgnoreCase(student.getEmail())) {
return student;
}
}
return null;
}
public static List<Version> filterPrivateVersions(Task task) {
if (task.getVersions().isEmpty()) {
throw new IllegalStateException(
"task has no versions: " + task.getId()
);
}
final List<Version> versions = new ArrayList<Version>(
task.getVersions().values()
);
final List<Version> versionsPriv = new ArrayList<Version>(
versions
);
for (
Iterator<Version> verIt = versionsPriv.iterator();
verIt.hasNext();
) {
if (verIt.next().isShared()) {
verIt.remove();
}
}
return versionsPriv.isEmpty() ? versions : versionsPriv;
}
// FIXME this should be stored in Couch
// along with first access to the task
public static Version resolveVersion(
final Task task,
final int anchor, final int step,
final Collection<String> studentIds, final String studentId
) {
final List<Version> versionsEff =
filterPrivateVersions(task);
final ArrayList<String> studIds =
new ArrayList<String>(studentIds);
Collections.sort(studIds);
final int studIdx = studIds.indexOf(studentId);
final int vSize = versionsEff.size();
final int verIdx = (anchor + (vSize + step) * studIdx) % vSize;
return versionsEff.get(verIdx);
}
public static Version resolveVersion(
final Task task,
final IndexEntry indexEntry,
final Group group,
final String studentId
) {
return resolveVersion(
task,
indexEntry.getVerAnchor(),
indexEntry.getVerStep(),
group.getStudents().keySet(),
studentId
);
}
public static <F extends FileBase> List<F> resolveFileType(
final List<F> files,
final SortedMap<String, FileType> fileTypes
) {
for (F file : files) {
resolveFileType(file, fileTypes);
}
return files;
}
public static <F extends FileBase> F resolveFileType(
final F file,
final SortedMap<String, FileType> fileTypes
) {
file.setFileType(resolve(
new TreeMap<String, FileType>(file.getFileType()),
fileTypes
));
return file;
}
}