forked from adelaalfar/play-form-kludge
-
Notifications
You must be signed in to change notification settings - Fork 46
/
Student.java
219 lines (190 loc) · 5.59 KB
/
Student.java
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
package models;
import java.util.ArrayList;
import java.util.List;
import views.formdata.StudentFormData;
/**
* Simple model class to represent students.
* This class includes:
* <ul>
* <li> The model structure (fields, plus getters and setters).
* <li> Methods to facilitate form display (makeStudentFormData).
* <li> Some fields and methods to "fake" a database of Students, including valid and invalid.
* </ul>
*/
public class Student {
private long id;
private String name;
private String password;
private List<Hobby> hobbies = new ArrayList<>(); // Hobbies are optional.
private GradeLevel level;
private GradePointAverage gpa;
private List<Major> majors = new ArrayList<>(); // Majors are optional.
/** Model entities typically want to have a no-arg constructor. */
public Student() {
}
public Student(long id, String name, String password, GradeLevel level, GradePointAverage gpa) {
this.setId(id);
this.name = name;
this.password = password;
this.level = level;
this.gpa = gpa;
}
/**
* @return the id
*/
private long getId() {
return id;
}
/**
* @param id the id to set
*/
private void setId(long id) {
this.id = id;
}
public boolean hasHobby(String hobbyName) {
for (Hobby hobby : this.hobbies) {
if (hobbyName.equals(hobby.getName()))
return true;
}
return false;
}
public void addHobby(Hobby hobby) {
this.hobbies.add(hobby);
}
public boolean hasMajor(String majorName) {
for (Major major : this.getMajors()) {
if (majorName.equals(major.getName()))
return true;
}
return false;
}
public String toString() {
return String.format("[Student name: '%s' Password: '%s' Hobbies: %s Grade Level: %s GPA: %s Majors: %s]", this.getName(),
this.getPassword(), this.hobbies, this.level, this.gpa, this.getMajors());
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the level
*/
public GradeLevel getLevel() {
return level;
}
/**
* @param level the level to set
*/
public void setLevel(GradeLevel level) {
this.level = level;
}
/**
* @return the gpa
*/
public GradePointAverage getGpa() {
return gpa;
}
/**
* @param gpa the gpa to set
*/
public void setGpa(GradePointAverage gpa) {
this.gpa = gpa;
}
/**
* @return the majors
*/
public List<Major> getMajors() {
return majors;
}
/**
* @param majors the majors to set
*/
public void setMajors(List<Major> majors) {
this.majors = majors;
}
public void addMajor(Major major) {
this.majors.add(major);
}
/**
* Return a StudentFormData instance constructed from a student instance.
* @param id The ID of a student instance.
* @return The StudentFormData instance, or throws a RuntimeException.
*/
public static StudentFormData makeStudentFormData(long id) {
for (Student student : allStudents) {
if (student.getId() == id) {
return new StudentFormData(student.name, student.password, student.level, student.gpa, student.hobbies, student.majors);
}
}
throw new RuntimeException("Couldn't find student");
}
/**
* Returns a Student instance created from the form data.
* Assumes that the formData has been validated.
* The ID field is not assigned or managed in this application.
* @param formData The student form data.
* @return A student instance.
*/
public static Student makeInstance(StudentFormData formData) {
Student student = new Student();
student.name = formData.name;
student.password = formData.password;
for (String hobby : formData.hobbies) {
student.hobbies.add(Hobby.findHobby(hobby));
}
student.level = GradeLevel.findLevel(formData.level);
student.gpa = GradePointAverage.findGPA(formData.gpa);
for (String major : formData.majors) {
student.majors.add(Major.findMajor(major));
}
return student;
}
/** Fake a database of students. */
private static List<Student> allStudents = new ArrayList<>();
/** Populate the fake database with both valid and invalid students, just for tutorial purposes.*/
static {
// Valid student. No optional data supplied.
allStudents.add(new Student(1L, "Joe Good", "mypassword", GradeLevel.findLevel("Freshman"), GradePointAverage.findGPA("4.0")));
// Valid student with optional data.
allStudents.add(new Student(2L, "Alice Good", "mypassword", GradeLevel.findLevel("Sophomore"), GradePointAverage.findGPA("4.0")));
getById(2L).addHobby(Hobby.findHobby("Biking"));
getById(2L).addHobby(Hobby.findHobby("Surfing"));
getById(2L).addMajor(Major.findMajor("Chemistry"));
getById(2L).addMajor(Major.findMajor("Physics"));
// Invalid student. Password is too short.
allStudents.add(new Student(3L, "Frank Bad", "pass", GradeLevel.findLevel("Freshman"), GradePointAverage.findGPA("4.0")));
}
/**
* Find a student instance given the ID.
* @param id The id of the student.
* @return The Student instance, or throws a RuntimeException.
*/
public static Student getById(long id) {
for (Student student : allStudents) {
if (student.getId() == id) {
return student;
}
}
throw new RuntimeException("Couldn't find student");
}
}