package de.dhbw.humbuch.util; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.TreeMap; import de.dhbw.humbuch.model.entity.BorrowedMaterial; import de.dhbw.humbuch.model.entity.Grade; import de.dhbw.humbuch.model.entity.Student; /** * Utility class which process information used for latter Pdf generation. * * @author Henning Muszynski * */ public class PDFInformationProcessor { /** * It sorts the final data structure for grades and students and links * together all students and their materials. * * @param allSelectedMaterials * all selected materials which should be linked to their * students * @param allSelectedStudents * all selected students which should be linked to their * materials * @return the students and their materials linked together in one data * structure * */ public static LinkedHashMap<Student, List<BorrowedMaterial>> linkStudentsAndMaterials( HashSet<BorrowedMaterial> allSelectedMaterials, HashSet<Student> allSelectedStudents) { LinkedHashMap<Student, List<BorrowedMaterial>> studentsWithMaterials = new LinkedHashMap<Student, List<BorrowedMaterial>>(); // Sort for grades and students TreeMap<Grade, List<Student>> treeToSortForGrades = new TreeMap<Grade, List<Student>>(); for (Student student : allSelectedStudents) { if (treeToSortForGrades.containsKey(student.getGrade())) { List<Student> studentsInGrade = treeToSortForGrades.get(student .getGrade()); if (studentsInGrade.contains(student)) { continue; } studentsInGrade.add(student); Collections.sort(studentsInGrade); treeToSortForGrades.put(student.getGrade(), studentsInGrade); } else { List<Student> studentList = new ArrayList<Student>(); studentList.add(student); treeToSortForGrades.put(student.getGrade(), studentList); } } // Extract all the informationen needed to create the pdf for (Grade grade : treeToSortForGrades.keySet()) { List<Student> studentsInGrade = treeToSortForGrades.get(grade); for (Student student : studentsInGrade) { for (BorrowedMaterial material : allSelectedMaterials) { if (student.equals(material.getStudent())) { if (studentsWithMaterials.containsKey(student)) { List<BorrowedMaterial> currentlyAddedMaterials = studentsWithMaterials .get(student); currentlyAddedMaterials.add(material); Collections.sort(currentlyAddedMaterials); studentsWithMaterials.put(student, currentlyAddedMaterials); } else { List<BorrowedMaterial> materialList = new ArrayList<BorrowedMaterial>(); materialList.add(material); studentsWithMaterials.put(student, materialList); } } } } } return studentsWithMaterials; } }