de.berstanio.ghgparser.User Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ghgsek2dsbparser Show documentation
Show all versions of ghgsek2dsbparser Show documentation
Fetching and parsing DSB plan for GHG
package de.berstanio.ghgparser;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
/**
* Representiert ein Nutzerprofil mit gewählten Kursen.
*/
public class User implements Serializable{
//Die Liste von gewählten Kursen
private ArrayList coreCourses;
//Für welches Jahr das Profil gilt.
private int year;
public static final long serialVersionUID = -2636346567614007956L;
public User(ArrayList coreCourses, int year){
this.coreCourses = coreCourses;
this.year = year;
saveUser();
}
/**
* Maskiert alle Kurse aus einem Plan weg, die der User nicht belegt hat. Außerdem trägt er die Stundenlänge ein.
* @param dayListMap Die Map, aus der die nicht belegten Elemente wegmaskiert werden sollen
* @return Die Map, nach der maskierung
*/
//
public HashMap> maskPlan(HashMap> dayListMap){
HashMap> newMap = new HashMap<>();
//Erstmal die Map mit leeren Kursen auffüllen
newMap.put(DayOfWeek.MONDAY, new LinkedList<>(IntStream.rangeClosed(1, 8).mapToObj(value -> {
Course course = new Course();
course.setLength(1);
course.setLesson(value);
course.setCourseName("");
course.setTeacher("");
course.setRoom("");
course.setDay(DayOfWeek.MONDAY);
return course;
}).collect(Collectors.toList())));
newMap.put(DayOfWeek.TUESDAY, new LinkedList<>(IntStream.rangeClosed(1, 8).mapToObj(value -> {
Course course = new Course();
course.setLength(1);
course.setLesson(value);
course.setCourseName("");
course.setTeacher("");
course.setRoom("");
course.setDay(DayOfWeek.TUESDAY);
return course;
}).collect(Collectors.toList())));
newMap.put(DayOfWeek.WEDNESDAY, new LinkedList<>(IntStream.rangeClosed(1, 8).mapToObj(value -> {
Course course = new Course();
course.setLength(1);
course.setLesson(value);
course.setCourseName("");
course.setTeacher("");
course.setRoom("");
course.setDay(DayOfWeek.WEDNESDAY);
return course;
}).collect(Collectors.toList())));
newMap.put(DayOfWeek.THURSDAY, new LinkedList<>(IntStream.rangeClosed(1, 8).mapToObj(value -> {
Course course = new Course();
course.setLength(1);
course.setLesson(value);
course.setCourseName("");
course.setTeacher("");
course.setRoom("");
course.setDay(DayOfWeek.THURSDAY);
return course;
}).collect(Collectors.toList())));
newMap.put(DayOfWeek.FRIDAY, new LinkedList<>(IntStream.rangeClosed(1, 8).mapToObj(value -> {
Course course = new Course();
course.setLength(1);
course.setLesson(value);
course.setCourseName("");
course.setTeacher("");
course.setRoom("");
course.setDay(DayOfWeek.FRIDAY);
return course;
}).collect(Collectors.toList())));
//Geht über alle gewählten Kurse rüber und fügt den aktuellenb Stand(das übergebene) in die Map ein
//Falls er den Kurs in der übergebenen Liste nicht findet, deutet das auf eine Jahrgangsaktivität hin und Infos zu der wären im 1. Element von BLock
//Deshalb fügt er dann das hinzu
getCoreCourses().forEach(coreCourse -> {
coreCourse.getCourses().forEach(course -> {
Block block = dayListMap.get(course.getDay()).get(course.getLesson() - 1);
Optional optionalCourse = block.getCourses().stream().filter(tmp ->
tmp.getTeacher().equalsIgnoreCase(course.getTeacher())
&& tmp.getCourseName().equalsIgnoreCase(course.getCourseName())).findFirst();
if (optionalCourse.isPresent()){
newMap.get(course.getDay()).set(course.getLesson() - 1, optionalCourse.get());
optionalCourse.get().setLengthInMin(course.getLengthInMin());
}else {
newMap.get(course.getDay()).set(course.getLesson() - 1, block.getCourses().get(0));
}
});
});
return newMap;
}
/**
* Lädt die UserProfile von der Festplatte
* @return Eine Liste von Usern, die auf der Festplatte gespeichert waren
*/
//Läd User-Daten
public static ArrayList loadUsers(){
File dir = GHGParser.getBasedir();
ArrayList users = new ArrayList<>();
if (dir.listFiles() != null) {
if (dir.listFiles().length == 0) return users;
//Nimmt alle files, welche kein "plan" enthalten, da das User-Files sind
Arrays.stream(dir.listFiles()).filter(File::isFile).filter(file -> !file.getName().contains("plan")).forEach(file1 -> {
try {
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file1));
User user = (User) objectInputStream.readObject();
objectInputStream.close();
users.add(user);
file1.delete();
user.saveUser();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
file1.delete();
}
});
}
return users;
}
/**
* Löscht den akutellen User
*/
public void deleteUser(){
File dir = GHGParser.getBasedir();
File file = new File(dir.getAbsolutePath() + "/" + hashCode() + ".yml");
file.delete();
GHGParser.getUsers().remove(this);
}
/**
* Speichert den aktuellen User
*/
//Der Dateiname ist der HashCode des Users. Ist das eine schlechte Idee? HashCodes sind ja auf einzigartigkeit ausgelegt
public void saveUser(){
try {
File dir = GHGParser.getBasedir();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(dir.getAbsolutePath() + "/" + hashCode() + ".yml"));
objectOutputStream.writeObject(this);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Gibt die Liste an belegten Kursen zurück
* @return Die Liste an belegten Kursen
*/
public ArrayList getCoreCourses() {
return coreCourses;
}
/**
* Setzt die Liste an belegten Kursen
* @param coreCourses Die Liste an belegten Kursen
*/
public void setCoreCourses(ArrayList coreCourses) {
this.coreCourses = coreCourses;
}
/**
* Gibt den Jahrgang des Profils zurück
* @return Der Jahrgang als int
*/
public int getYear() {
return year;
}
/**
* Setzt den Jahrgang des Profils
* @param year Der Jahrgang als int
*/
public void setYear(int year) {
this.year = year;
}
}