-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParser.java
More file actions
118 lines (109 loc) · 5.68 KB
/
Parser.java
File metadata and controls
118 lines (109 loc) · 5.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import com.opencsv.CSVParserBuilder;
import com.opencsv.CSVReaderBuilder;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
abstract public class Parser {
private static ArrayList<Integer> themeIndexes = new ArrayList<Integer>();
public static ArrayList<Student> createStudentData(String pathCSV, String courseTitle, String token, String APIversion, String groupId) throws Exception {
var vkParser = new VkHumanParser(token, APIversion, groupId);
vkParser.createHumansData();
var humans = vkParser.getHumans();
var students = parseCSVtoCourse(pathCSV, courseTitle);
var studentsData = new ArrayList<Student>();
var usedID = new ArrayList<Integer>();
for (var student : students) {
for (var human : humans) {
var studentName = student.getFirst_name();
var studentSurname = student.getLast_name();
var humanName = human.getFirst_name();
var humanSurname = human.getLast_name();
if (studentName.equals(humanName) && studentSurname.equals(humanSurname)) {
if (!usedID.contains(human.getId()))
studentsData.add(new Student(studentName, studentSurname, human.getId(), human.getBdate(), human.getCity(), human.getMobile_phone(), human.getPhoto_max_orig(), human.getFaculty_name(), human.getUniversity_name(), human.getEducation_form(), human.getCountry(), human.getSite(), human.getSex(), student.getCurrentSubjects(), student.getIndebrednessSubjects()));
usedID.add(human.getId());
}
}
}
return studentsData;
}
public static ArrayList<Student> parseCSVtoCourse(String path, String title) throws IOException{
var csvParser = new CSVParserBuilder().withSeparator(';').build();
var csvReader = new CSVReaderBuilder(new FileReader(path)).withCSVParser(csvParser).build();
var themesString = csvReader.readNext();
var excercisesString = csvReader.readNext();
var maxValueSting = csvReader.readNext();
var themes = transformThemes(themesString, excercisesString, maxValueSting);
var subject = new Subject(title, themes);
var students = new ArrayList<Student>();
try {
String[] humanString;
while (true) {
var subjectArr = new ArrayList<Subject>();
var localThemes = new ArrayList<Theme>();
for (var theme : themes)
localThemes.add(theme.clone());
subjectArr.add(new Subject(title, localThemes));
humanString = csvReader.readNext();
if (humanString[0].equals("")) break;
var nameData = transformNameData(humanString[0]);
var student = new Student(nameData[0], nameData[1], subjectArr,new ArrayList<Subject>());
UpdateGradeToStudent(student,humanString);
students.add(student);
}
}
catch (NullPointerException e) {
return students;
}
return students;
}
private static ArrayList<Theme> transformThemes(String[] themeStings, String[] excerciseStrings, String[] maximumStrings) {
var themes = new ArrayList<Theme>();
for (int i = 3; i < themeStings.length; i++) {
if(themeStings[i].equals("")) continue;
themeIndexes.add(i);
}
var themesCount = themeIndexes.stream().count();
for (int i = 0; i < themesCount; i++) {
var currentIndex = themeIndexes.get(i);
var subArrayExcercises = Arrays.copyOfRange(excerciseStrings, currentIndex + 1, (i == themesCount - 1 ? currentIndex + 2: themeIndexes.get(i + 1)));
var subArrayMaximum = Arrays.copyOfRange(maximumStrings, currentIndex + 1, (i == themesCount - 1 ? currentIndex + 2 : themeIndexes.get(i + 1)));
var excercises = transformExcercises(subArrayExcercises, subArrayMaximum);
themes.add(new Theme(themeStings[currentIndex], excercises));
}
return themes;
}
private static ArrayList<Exercise> transformExcercises(String[] excerciseStrings,String[] maximumStrings) {
var excercises = new ArrayList<Exercise>();
for(int i = 0; i < excerciseStrings.length; i++) {
if(excerciseStrings[i].startsWith("ДЗ: ")) {
var excercise = new Exercise(excerciseStrings[i].substring(4), 0, Integer.valueOf(maximumStrings[i]));
excercises.add(excercise);
}
}
return excercises;
}
private static String[] transformNameData(String nameData) {
var namesArr = nameData.split(" ");
var resultNames = new String[2];
resultNames[0] = namesArr[1];
resultNames[1] = namesArr[0];
if (namesArr.length > 2)
for (int i = 2; i < namesArr.length; i++)
resultNames[1] += namesArr[i];
return resultNames;
}
private static void UpdateGradeToStudent(Student student, String[] humanString) {
var subject = student.getCurrentSubjects().get(0);
var themes = subject.getThemes();
for(int i = 0; i < themes.stream().count(); i++) {
var excercises = themes.get(i).getExercises();
for (int j = 0; j < excercises.stream().count(); j++) {
excercises.get(j).UpdateCurrentGrade(Double.valueOf(humanString[themeIndexes.get(i) + 1 + j]));
}
themes.get(i).UpdateGrade();
}
subject.UpdateGrade();
}
}