Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
.idea
.gradle
.classpath
.project
.settings
bin/
9 changes: 9 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@ repositories {
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.2'

compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'

testCompileOnly 'org.projectlombok:lombok:1.18.30'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'

implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.9'
implementation group: 'org.slf4j', name: 'slf4j-simple', version: '2.0.9'
}

test {
Expand Down
81 changes: 81 additions & 0 deletions src/main/java/task_3/SimpsonsCharacter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package task_3;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

public class SimpsonsCharacter {

private static AtomicInteger counter = new AtomicInteger(0);
private final String name;
private int age;
private final int characterId;
private final Set<SimpsonsCourse> enrolledCourses;
private final List<SimpsonsGrade> grades;

public SimpsonsCharacter(String name, int age) {

if (name == null || name.isBlank()) {
throw new IllegalArgumentException("Please provide correct name");
}

if (age < 1) {
throw new IllegalArgumentException("Age must be above 0");
}

this.name = name;
this.age = age;
this.characterId = nextId();
this.enrolledCourses = new HashSet<>();
this.grades = new ArrayList<>();

}

private static int nextId() {
return counter.incrementAndGet();
}

public String getName() {
return name;
}

public int getAge() {
return age;
}

public int getCharacterId() {
return characterId;
}

public Set<SimpsonsCourse> getEnrolledCourses() {
return enrolledCourses;
}

public List<SimpsonsGrade> getGrades() {
return grades;
}

@Override
public int hashCode() {
return Objects.hash(age, characterId, enrolledCourses, grades, name);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SimpsonsCharacter other = (SimpsonsCharacter) obj;
return age == other.age && characterId == other.characterId
&& Objects.equals(enrolledCourses, other.enrolledCourses) && Objects.equals(grades, other.grades)
&& Objects.equals(name, other.name);
}


}
57 changes: 57 additions & 0 deletions src/main/java/task_3/SimpsonsCourse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package task_3;

import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;

public class SimpsonsCourse {

private final String courseName;
private static AtomicInteger counter = new AtomicInteger(0);
private final int courseId;

public SimpsonsCourse(String courseName) {
if (courseName == null || courseName.isBlank()) {
throw new IllegalArgumentException("Please provide correct courseName");
}

this.courseName = courseName;
this.courseId = nextId();
}

private static int nextId() {
return counter.incrementAndGet();
}

public String getCourseName() {
return courseName;
}

public int getCourseId() {
return courseId;
}

@Override
public int hashCode() {
return Objects.hash(courseId, courseName);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SimpsonsCourse other = (SimpsonsCourse) obj;
return courseId == other.courseId && Objects.equals(courseName, other.courseName);
}

@Override
public String toString() {
return "courseId: " + courseId;
}



}
49 changes: 49 additions & 0 deletions src/main/java/task_3/SimpsonsGrade.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package task_3;

import java.util.Objects;

public class SimpsonsGrade {

private final SimpsonsCourse course;
private final SimpsonsCharacter character;
private final int gradeValue;

public SimpsonsGrade(SimpsonsCourse course, SimpsonsCharacter character, int gradeValue) {
this.course = course;
this.character = character;
this.gradeValue = gradeValue;
}

public SimpsonsCourse getCourse() {
return course;
}

public SimpsonsCharacter getCharacter() {
return character;
}

public int getGradeValue() {
return gradeValue;
}

@Override
public int hashCode() {
return Objects.hash(character, course, gradeValue);
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SimpsonsGrade other = (SimpsonsGrade) obj;
return Objects.equals(character, other.character) && Objects.equals(course, other.course)
&& gradeValue == other.gradeValue;
}



}
73 changes: 73 additions & 0 deletions src/main/java/task_3/SimpsonsSchool.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package task_3;

import java.util.List;
import java.util.stream.Collectors;

import lombok.extern.slf4j.Slf4j;
import task_3.exceptions.CoursesNotFoundException;

@Slf4j
public class SimpsonsSchool {

public void enrollCharacter(SimpsonsCharacter character, List<SimpsonsCourse> courses) {

if (character == null || courses == null || courses.isEmpty()) {
throw new IllegalArgumentException("Arguments can't be null or empty");
}

log.info("Attempt to enroll {}'s character", character.getName());

if (courses.stream().anyMatch(course -> course == null)) {
throw new IllegalArgumentException("Courses can't contain null elements");
}

character.getEnrolledCourses().addAll(courses);
log.info("{}'s character was enrolled successful", character.getName());

}

public void addGrade(SimpsonsCharacter character, SimpsonsCourse course, int gradeValue) {

if (gradeValue < 1 || gradeValue > 5) {
throw new IllegalArgumentException("Grade value must be from 1 to 5");
}

if (character == null || course == null) {
throw new IllegalArgumentException("Null args was got");
}

log.info("Attempt to add grade {} of {}'s course: {}", gradeValue, character.getName(),
course.getCourseName());

if (!character.getEnrolledCourses().contains(course)) {
throw new CoursesNotFoundException(
character.getName() + " not enrolled on " + course.getCourseName() + " yet");
}

character.getGrades().add(new SimpsonsGrade(course, character, gradeValue));
log.info("Adding grade {} of {}'s course: {}, succsessful", gradeValue, character.getName(),
course.getCourseName());

}

public List<String> getCharacterTranscript(SimpsonsCharacter character) {

if (character == null) {
throw new IllegalArgumentException("Null args was got");
}

log.info("Try to get {}'s transcript", character.getName());

if (character.getEnrolledCourses().isEmpty()) {
throw new CoursesNotFoundException("Not found any " + character.getName() + "'s courses");
}

log.info("{}'s transcript was got successful", character.getName());

return character.getGrades().stream()
.map(grade -> String.format("%s : %d", grade.getCourse().getCourseName(), grade.getGradeValue()))
.collect(Collectors.toList());

}

}
83 changes: 83 additions & 0 deletions src/main/java/task_3/Task3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package task_3;

import java.util.ArrayList;
import java.util.List;

import lombok.extern.slf4j.Slf4j;
import task_3.exceptions.CoursesNotFoundException;

@Slf4j
public class Task3 {

public static void main(String[] args) {

SimpsonsCourse course1 = new SimpsonsCourse("History");
SimpsonsCourse course2 = new SimpsonsCourse("Math");
SimpsonsCourse course3 = new SimpsonsCourse("Bart's Pranks");
SimpsonsCourse course4 = new SimpsonsCourse("Science");
SimpsonsCourse course5 = new SimpsonsCourse("Music");
SimpsonsCourse course6 = new SimpsonsCourse("Environmentalism");

SimpsonsSchool school = new SimpsonsSchool();

SimpsonsCharacter simpsonsCharacter1 = new SimpsonsCharacter("Bart Simpson", 10);
SimpsonsCharacter simpsonsCharacter2 = new SimpsonsCharacter("Lisa Simpson", 8);

List<SimpsonsCourse> emptyList = new ArrayList<>();

try {
school.enrollCharacter(simpsonsCharacter1, emptyList);
} catch (IllegalArgumentException e) {
log.error("Bad args in enrollCharacter(): {}", e.getMessage());
}

emptyList.add(null);
emptyList.add(course6);

try {
school.enrollCharacter(simpsonsCharacter1, emptyList);
} catch (IllegalArgumentException e) {
log.error("Bad args in enrollCharacter(): {}", e.getMessage());
}

try {
school.addGrade(simpsonsCharacter2, course6, 0);
} catch (IllegalArgumentException e) {
log.error("Bad args in addGrade: {}", e.getMessage());
}

try {
school.addGrade(simpsonsCharacter2, null, 5);
} catch (IllegalArgumentException e) {
log.error("Bad args in addGrade(): {}", e.getMessage());
}

try {
school.getCharacterTranscript(simpsonsCharacter2);
} catch (CoursesNotFoundException e) {
log.error("Attempt to get empty list in getCharacterTranscript(): {}", e.getMessage());
}

try {
school.addGrade(simpsonsCharacter2, course1, 5);
} catch (CoursesNotFoundException e) {
log.error("Attempt to grade not enrolled course in addGrade(): {}", e.getMessage());
}

school.enrollCharacter(simpsonsCharacter1, List.of(course2, course1, course3));
school.enrollCharacter(simpsonsCharacter2, List.of(course4, course5, course6));

school.addGrade(simpsonsCharacter1, course2, 4);
school.addGrade(simpsonsCharacter1, course1, 3);
school.addGrade(simpsonsCharacter1, course3, 5);
school.addGrade(simpsonsCharacter2, course4, 5);
school.addGrade(simpsonsCharacter2, course5, 4);
school.addGrade(simpsonsCharacter2, course6, 5);

System.out.println(simpsonsCharacter2.getName() + " has following grades: "
+ school.getCharacterTranscript(simpsonsCharacter2));
System.out.println(simpsonsCharacter1.getName() + " has following grades: "
+ school.getCharacterTranscript(simpsonsCharacter1));

}
}
10 changes: 10 additions & 0 deletions src/main/java/task_3/exceptions/CoursesNotFoundException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package task_3.exceptions;

public class CoursesNotFoundException extends RuntimeException {

public CoursesNotFoundException(String message) {
super(message);
}


}