diff --git a/_1_basics/src/main/java/code/_3_in_class/BunaZiua.java b/_1_basics/src/main/java/code/_3_in_class/BunaZiua.java new file mode 100644 index 000000000..838a1af47 --- /dev/null +++ b/_1_basics/src/main/java/code/_3_in_class/BunaZiua.java @@ -0,0 +1,8 @@ +package code._3_in_class; + +public class BunaZiua { + + public static void main(String[] args) { // COMMAND : psvm + System.out.println("buna"); + } +} diff --git a/_2_oo/src/main/java/code/_3_in_class/Boxer.java b/_2_oo/src/main/java/code/_3_in_class/Boxer.java new file mode 100644 index 000000000..0592c781f --- /dev/null +++ b/_2_oo/src/main/java/code/_3_in_class/Boxer.java @@ -0,0 +1,33 @@ +package code._3_in_class; + +import java.util.Random; + +public class Boxer implements IBoxer { + + String name; + int health=100; + int damagePerAttack=10; + + + public Boxer(String name, int health, int damagePerAttack) { + this.name = name; + this.health = health; + this.damagePerAttack = damagePerAttack; + } + + public Boxer(String name) { + this.name = name; + } + + public void attack(Boxer opponent){ + int defend = (this.damagePerAttack * this.defend())/100; + opponent.health = opponent.health - (this.damagePerAttack - defend); + System.out.println(this.name + " il ataca pe " + opponent.name + '\n' + + this.name + " health = " + this.health + " " + opponent.name + " health = " + opponent.health ); + } + + public int defend() { + Random ran = new Random(); + return ran.nextInt(101); + } +} diff --git a/_2_oo/src/main/java/code/_3_in_class/BruceLee.java b/_2_oo/src/main/java/code/_3_in_class/BruceLee.java new file mode 100644 index 000000000..c7fecf477 --- /dev/null +++ b/_2_oo/src/main/java/code/_3_in_class/BruceLee.java @@ -0,0 +1,18 @@ +package code._3_in_class; + +public class BruceLee extends Boxer { + + public BruceLee(String name, int health, int damagePerAttack){ + super(name,health,damagePerAttack); + } + + public BruceLee(String name){ + super(name); + } + + public void attack(Boxer opponent) { + opponent.health = 0; + System.out.println(this.name + " il ataca pe " + opponent.name + '\n' + + this.name + " health = " + this.health + " " + opponent.name + " health = " + opponent.health ); + } +} diff --git a/_2_oo/src/main/java/code/_3_in_class/IBoxer.java b/_2_oo/src/main/java/code/_3_in_class/IBoxer.java new file mode 100644 index 000000000..0e55594a6 --- /dev/null +++ b/_2_oo/src/main/java/code/_3_in_class/IBoxer.java @@ -0,0 +1,6 @@ +package code._3_in_class; + +public interface IBoxer { + void attack(Boxer opponent); + int defend(); +} diff --git a/_2_oo/src/main/java/code/_3_in_class/Main.java b/_2_oo/src/main/java/code/_3_in_class/Main.java index 3b87b4563..92d6012cb 100644 --- a/_2_oo/src/main/java/code/_3_in_class/Main.java +++ b/_2_oo/src/main/java/code/_3_in_class/Main.java @@ -1,8 +1,36 @@ package code._3_in_class; +import javax.swing.*; +import java.util.Random; public class Main { public static void main(String[] args) { //TODO put your code changes in here + Boxer Ion = new Boxer("Ion",100,14); + Boxer Vasile = new Boxer("Vasile",100,10); + Boxer bruceLee = new BruceLee("Bruce Lee"); + startBoxingMatch(Ion,bruceLee); + //startBoxingMatch(Ion,Vasile); + announceVictory(Ion,bruceLee); + } + + private static void announceVictory(Boxer b1, Boxer b2){ + if(b1.health <= 0) + System.out.println(b2.name + " a castigat."); + else + System.out.println(b1.name + " a castigat."); + } + + private static void startBoxingMatch(Boxer b1, Boxer b2) { + Random ran = new Random(); + int zeroOrOne = ran.nextInt(100); + while (b1.health > 0 && b2.health > 0) { + if (zeroOrOne % 2 == 0) + b1.attack(b2); + else + b2.attack(b1); + } + } + } \ No newline at end of file diff --git a/_3_design_patterns/src/main/java/code/_3_in_class/StaticExample.java b/_3_design_patterns/src/main/java/code/_3_in_class/StaticExample.java new file mode 100644 index 000000000..d2592668d --- /dev/null +++ b/_3_design_patterns/src/main/java/code/_3_in_class/StaticExample.java @@ -0,0 +1,31 @@ +package code._3_in_class; + +public class StaticExample { + static final int altaVariabila = 0; // will postpone for now + static int iStaticSauVariabilaDeClasa = 0; // keyword static -> ne lasa posibilitatea de schimbarea unei variabile + int iInstantaSauVariabilaDeInstanta = 0; + + public static void main(String[] args) { + StaticExample i1 = new StaticExample(); + StaticExample i2 = new StaticExample(); + StaticExample i3 = new StaticExample(); + + i1.iStaticSauVariabilaDeClasa = 1; + i2.iInstantaSauVariabilaDeInstanta = 2; + i3.iInstantaSauVariabilaDeInstanta = 3; + System.out.println("i1.iStatic =" + i1.iInstantaSauVariabilaDeInstanta); + System.out.println("i2.iInstanta =" + i2.iInstantaSauVariabilaDeInstanta); + System.out.println("i3.iInstanta=" + i3.iInstantaSauVariabilaDeInstanta); + + } + + static void m() { + System.out.println("static method"); + } + + void m2() { + System.out.println("m2"); + } + + + } diff --git a/clean_code_projects/_2_project_requirements_design_patterns/pom.xml b/clean_code_projects/_2_project_requirements_design_patterns/pom.xml index 0e7eda697..792e3b895 100644 --- a/clean_code_projects/_2_project_requirements_design_patterns/pom.xml +++ b/clean_code_projects/_2_project_requirements_design_patterns/pom.xml @@ -10,6 +10,18 @@ 4.0.0 _2_design_patterns_project + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/CollectionIterator.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/CollectionIterator.java new file mode 100644 index 000000000..24b72ab9c --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/CollectionIterator.java @@ -0,0 +1,39 @@ +package clean.code.design_patterns.requirements.DoctorRepository; + +import clean.code.design_patterns.requirements.Domain.Doctor; + +import java.util.List; +import java.util.NoSuchElementException; + +public class CollectionIterator implements ICollectionIterator { + private List list; + private int position; + + public CollectionIterator(List list) { + this.list = list; + this.position = 0; + } + + @Override + public boolean hasNext() { + return position < list.size(); + } + + @Override + public Doctor next() { + if (hasNext()) { + Doctor nextDoctor = list.get(position); + position++; + return nextDoctor; + } + throw new NoSuchElementException("No more elements in the collection."); + } + + @Override + public Doctor currentPosition() { + if (position >= 0 && position < list.size()) { + return list.get(position); + } + throw new IllegalStateException("Iterator is not pointing to a valid position."); + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/DoctorRepository.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/DoctorRepository.java new file mode 100644 index 000000000..de8c1fe35 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/DoctorRepository.java @@ -0,0 +1,31 @@ +package clean.code.design_patterns.requirements.DoctorRepository; +import java.util.ArrayList; +import java.util.List; +import clean.code.design_patterns.requirements.Domain.Doctor; + +public class DoctorRepository implements ICollection { + private List repo; + + public DoctorRepository() { + this.repo = new ArrayList<>(); + } + + @Override + public void add(Doctor doctor) { + this.repo.add(doctor); + } + + @Override + public void remove(Doctor doctor) { + this.repo.remove(doctor); + } + + @Override + public ICollectionIterator iterator() { + return new CollectionIterator(this.repo); + } + + public List getAll() { + return this.repo; + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollection.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollection.java new file mode 100644 index 000000000..0ba96f7f6 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollection.java @@ -0,0 +1,8 @@ +package clean.code.design_patterns.requirements.DoctorRepository; +import clean.code.design_patterns.requirements.Domain.Doctor; + +public interface ICollection { + void add(Doctor doctor); + void remove(Doctor doctor); + ICollectionIterator iterator(); +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollectionIterator.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollectionIterator.java new file mode 100644 index 000000000..7731e5d18 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/DoctorRepository/ICollectionIterator.java @@ -0,0 +1,10 @@ +package clean.code.design_patterns.requirements.DoctorRepository; + + +import clean.code.design_patterns.requirements.Domain.Doctor; + +public interface ICollectionIterator { + boolean hasNext(); + Doctor next(); + Doctor currentPosition(); +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Domain/Doctor.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Domain/Doctor.java new file mode 100644 index 000000000..5010e01e9 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Domain/Doctor.java @@ -0,0 +1,66 @@ +package clean.code.design_patterns.requirements.Domain; +import java.util.Objects; + +public class Doctor { + private String firstName; + private String lastName; + private String specialization; + private double salary; + + public Doctor(String firstName, String lastName, String specialization, double salary) { + this.firstName = firstName; + this.lastName = lastName; + this.specialization = specialization; + this.salary = salary; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getSpecialization() { + return specialization; + } + + public void setSpecialization(String specialization) { + this.specialization = specialization; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Doctor doctor = (Doctor) o; + return Objects.equals(firstName, doctor.firstName) && Objects.equals(lastName, doctor.lastName) && Objects.equals(specialization, doctor.specialization) && Objects.equals(salary, doctor.salary); + } + + @Override + public int hashCode() { + return Objects.hash(firstName, lastName, specialization, salary); + } + + @Override + public String toString() { + return "Dr. " + firstName + ' ' + lastName + ", " + specialization + ", has salary " + salary + "$"; + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java index 8a9fccb7b..10f58240d 100644 --- a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Main.java @@ -1,8 +1,16 @@ package clean.code.design_patterns.requirements; +import clean.code.design_patterns.requirements.DoctorRepository.DoctorRepository; +import clean.code.design_patterns.requirements.Service.Service; +import clean.code.design_patterns.requirements.UI.UserInterface; +import clean.code.design_patterns.requirements.Validate.Validator; public class Main { - public static void main(String[] args) { - //TODO implement your design patterns in this package + + DoctorRepository repo = new DoctorRepository(); + Validator validator = new Validator(); + Service service = new Service(repo,validator); + UserInterface ui = new UserInterface(service); + ui.start(); } -} +} \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Service/Service.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Service/Service.java new file mode 100644 index 000000000..eab22089d --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Service/Service.java @@ -0,0 +1,99 @@ +package clean.code.design_patterns.requirements.Service; +import clean.code.design_patterns.requirements.DoctorRepository.DoctorRepository; +import clean.code.design_patterns.requirements.DoctorRepository.ICollectionIterator; +import clean.code.design_patterns.requirements.Domain.Doctor; +import clean.code.design_patterns.requirements.SortingStrategy.ISortingStrategy; +import clean.code.design_patterns.requirements.Validate.Validator; + +import java.util.List; +import java.util.Objects; + + +public class Service { + private DoctorRepository repo; + private Validator validator; + + public Service(DoctorRepository repo, Validator validator) { + this.repo = repo; + this.validator = validator; + } + + public void addDoctor(String firstName, String lastName, String specialization, double salary) { + Doctor doctor = new Doctor(firstName, lastName, specialization, salary); + validator.validate(doctor); + repo.add(doctor); + } + + public void deleteDoctor(String firstName, String lastName) { + ICollectionIterator iterator = repo.iterator(); + while (iterator.hasNext()) { + Doctor doctor = iterator.next(); + if (doctor.getFirstName().equals(firstName) && doctor.getLastName().equals(lastName)) { + repo.remove(doctor); + break; // Exit the loop after removing the doctor + } + } + } + + public void salaryUpdate(String firstName, String lastName, String specialization, double newSalary) { + Doctor doctor = new Doctor(firstName, lastName, specialization, newSalary); + validator.validate(doctor); + ICollectionIterator iterator = repo.iterator(); + while (iterator.hasNext()) { + Doctor currentDoctor = iterator.currentPosition(); + if (currentDoctor.getFirstName().equals(firstName) && currentDoctor.getLastName().equals(lastName) && Objects.equals(currentDoctor.getSpecialization(), specialization)) { + currentDoctor.setSalary(newSalary); + } + iterator.next(); + } + } + + public void specializationUpdate(String firstName, String lastName, String newSpecialization) { + ICollectionIterator iterator = repo.iterator(); + while (iterator.hasNext()) { + Doctor doctor = iterator.currentPosition(); + if (doctor.getFirstName().equals(firstName) && doctor.getLastName().equals(lastName)) { + Doctor updatedDoctor = new Doctor(firstName, lastName, newSpecialization, doctor.getSalary()); + validator.validate(updatedDoctor); + doctor.setSpecialization(newSpecialization); + } + iterator.next(); + } + } + + public void updateSpecializationAndSalary(String firstName, String lastName, String newSpecialization, double newSalary) { + ICollectionIterator iterator = repo.iterator(); + while (iterator.hasNext()) { + Doctor doctor = iterator.currentPosition(); + if (doctor.getFirstName().equals(firstName) && doctor.getLastName().equals(lastName)) { + Doctor updatedDoctor = new Doctor(firstName, lastName, newSpecialization, newSalary); + validator.validate(updatedDoctor); + doctor.setSpecialization(newSpecialization); + doctor.setSalary(newSalary); + } + iterator.next(); + } + } + + public List filterBySpecialization(String specialization) { + return repo.getAll() + .stream() + .filter(doctor -> doctor.getSpecialization().equals(specialization)) + .toList(); + } + + public List filterByName(String firstName, String lastName) { + return repo.getAll() + .stream() + .filter(doctor -> doctor.getFirstName().equals(firstName) && doctor.getLastName().equals(lastName)) + .toList(); + } + + public List sortList(ISortingStrategy strategy) { + return strategy.sort(repo.getAll()); + } + + public ICollectionIterator getIterator() { + return repo.iterator(); + } +} \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/ISortingStrategy.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/ISortingStrategy.java new file mode 100644 index 000000000..ad092cf8e --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/ISortingStrategy.java @@ -0,0 +1,9 @@ +package clean.code.design_patterns.requirements.SortingStrategy; + +import clean.code.design_patterns.requirements.Domain.Doctor; + +import java.util.List; + +public interface ISortingStrategy { + List sort(List list); +} \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortByName.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortByName.java new file mode 100644 index 000000000..fa9419838 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortByName.java @@ -0,0 +1,15 @@ +package clean.code.design_patterns.requirements.SortingStrategy; +import clean.code.design_patterns.requirements.Domain.Doctor; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class SortByName implements ISortingStrategy { + @Override + public List sort(List list) { + return list.stream() + .sorted(Comparator.comparing(Doctor::getFirstName).thenComparing(Doctor::getLastName)) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySalary.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySalary.java new file mode 100644 index 000000000..02e3e3f87 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySalary.java @@ -0,0 +1,15 @@ +package clean.code.design_patterns.requirements.SortingStrategy; +import clean.code.design_patterns.requirements.Domain.Doctor; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class SortBySalary implements ISortingStrategy { + @Override + public List sort(List list) { + return list.stream() + .sorted(Comparator.comparingDouble(Doctor::getSalary).reversed()) + .collect(Collectors.toList()); + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySpecialization.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySpecialization.java new file mode 100644 index 000000000..84be56c3e --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/SortingStrategy/SortBySpecialization.java @@ -0,0 +1,17 @@ +package clean.code.design_patterns.requirements.SortingStrategy; + + +import clean.code.design_patterns.requirements.Domain.Doctor; + +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +public class SortBySpecialization implements ISortingStrategy { + @Override + public List sort(List list) { + return list.stream() + .sorted(Comparator.comparing(Doctor::getSpecialization)) + .collect(Collectors.toList()); + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/UI/UserInterface.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/UI/UserInterface.java new file mode 100644 index 000000000..b865e9d18 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/UI/UserInterface.java @@ -0,0 +1,230 @@ +package clean.code.design_patterns.requirements.UI; +import clean.code.design_patterns.requirements.DoctorRepository.ICollectionIterator; +import clean.code.design_patterns.requirements.Domain.Doctor; +import clean.code.design_patterns.requirements.Service.Service; +import clean.code.design_patterns.requirements.SortingStrategy.SortByName; +import clean.code.design_patterns.requirements.SortingStrategy.SortBySalary; +import clean.code.design_patterns.requirements.SortingStrategy.SortBySpecialization; +import clean.code.design_patterns.requirements.Validate.ValidationException; + +import java.util.List; +import java.util.Scanner; +import java.util.stream.Stream; + +public class UserInterface { + private final Service service; + private final Scanner scanner; + + public UserInterface(Service service) { + this.service = service; + this.scanner = new Scanner(System.in); + } + + private void options(){ + + System.out.println("1. Add doctor."); + System.out.println("2. Delete doctor."); + System.out.println("3. Update doctor's specialization."); + System.out.println("4. Update doctor's salary"); + System.out.println("5. Update doctor's specialization and salary."); + System.out.println("6. Display doctors."); + System.out.println("7. Search for a doctor."); + System.out.println("8. Filter doctors by specialization."); + System.out.println("9. Sort doctors by name."); + System.out.println("10. Sort doctors by specialization."); + System.out.println("11. Sort doctors by salary."); + System.out.println("x. Exit"); + } + + public void start(){ + this.service.addDoctor("John","Doe","Cardiologist",4000.0); + this.service.addDoctor("Michael","Smith","Dermatologist",3000.0); + this.service.addDoctor("Sarah","Johnson","Pediatrician",4000.0); + this.service.addDoctor("Emily","Brown","Cardiologist",4500.0); + this.service.addDoctor("Daniel","Miller","Orthopedic",5000.0); + this.service.addDoctor("Olivia","Taylor","Neurologist",6000.0); + this.service.addDoctor("David","Anderson","Orthopedic",10000.0); + this.service.addDoctor("Emma","Wilson","Cardiologist",11000.0); + this.service.addDoctor("James","Clark","Dermatologist",9500.0); + this.service.addDoctor("Oliver","Hill","Orthopedic",3700.0); + this.service.addDoctor("Sophia","Baker","Neurologist",4100.0); + + String option; + options(); + while (true){ + + System.out.println("Enter your choice: "); + option = scanner.nextLine(); + switch (option){ + case "1" -> addDoctor(); + case "2" -> deleteDoctor(); + case "3" -> updateSpecialization(); + case "4" -> updateSalary(); + case "5" -> updateSpecializationSalary(); + case "6" -> displayDoctors(); + case "7" -> searchDoctor(); + case "8" -> filterBySpecialization(); + case "9" -> sortByName(); + case "10" -> sortBySpecialization(); + case "11" -> sortBySalary(); + case "x" -> { + return; + } + default -> System.out.println("Wrong option! Try again!"); + } + } + } + + private void sortBySalary() { + try { + List list = this.service.sortList(new SortBySalary()); + Stream stream = list.stream().map((doctor) -> {return ""+doctor.getFirstName()+" "+doctor.getLastName()+" "+doctor.getSalary();}); + stream.forEach(System.out::println); + System.out.println(); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void sortBySpecialization() { + try { + List list = this.service.sortList(new SortBySpecialization()); + Stream stream = list.stream().map((doctor) -> { + return "" + doctor.getFirstName() + " " + doctor.getLastName() + " " + doctor.getSpecialization(); + }); + stream.forEach(System.out::println); + System.out.println(); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void sortByName() { + try { + List list = this.service.sortList(new SortByName()); + Stream stream = list.stream().map((doctor) -> { + return "" + doctor.getFirstName() + " " + doctor.getLastName(); + }); + stream.forEach(System.out::println); + System.out.println(); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void filterBySpecialization() { + try { + String specialization; + System.out.println("Specialization: "); + specialization = scanner.nextLine(); + List list = this.service.filterBySpecialization(specialization); + list.forEach(System.out::println); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void searchDoctor() { + try { + String firstName, lastName; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + List list = this.service.filterByName(firstName, lastName); + list.forEach(System.out::println); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void displayDoctors() { + ICollectionIterator iterator = this.service.getIterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + } + + private void updateSpecializationSalary() { + try { + String firstName, lastName, newSpecialization; + String newSalary; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + System.out.println("New specialization: "); + newSpecialization = scanner.nextLine(); + System.out.println("New salary: "); + newSalary = scanner.nextLine(); + this.service.updateSpecializationAndSalary(firstName, lastName, newSpecialization, Double.parseDouble(newSalary)); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void updateSalary() { + try { + String firstName, lastName, specialization; + String newSalary; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + System.out.println("Specialization: "); + specialization = scanner.nextLine(); + System.out.println("New salary: "); + newSalary = scanner.nextLine(); + this.service.salaryUpdate(firstName, lastName, specialization, Double.parseDouble(newSalary)); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void updateSpecialization() { + try { + String firstName, lastName, newSpecialization; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + System.out.println("New specialization: "); + newSpecialization = scanner.nextLine(); + this.service.specializationUpdate(firstName, lastName, newSpecialization); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void deleteDoctor() { + try { + String firstName, lastName; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + this.service.deleteDoctor(firstName, lastName); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } + + private void addDoctor() { + try { + String firstName, lastName, specialization; + String salary; + System.out.println("First name: "); + firstName = scanner.nextLine(); + System.out.println("Last name: "); + lastName = scanner.nextLine(); + System.out.println("Specialization: "); + specialization = scanner.nextLine(); + System.out.println("Salary: "); + salary = scanner.nextLine(); + this.service.addDoctor(firstName, lastName, specialization, Double.parseDouble(salary)); + } catch (ValidationException | IllegalArgumentException e) { + System.out.println(e); + } + } +} + diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/IValidator.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/IValidator.java new file mode 100644 index 000000000..1994583e9 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/IValidator.java @@ -0,0 +1,8 @@ +package clean.code.design_patterns.requirements.Validate; + + +import clean.code.design_patterns.requirements.Domain.Doctor; + +public interface IValidator { + void validate(Doctor doctor) throws ValidationException; +} \ No newline at end of file diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/ValidationException.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/ValidationException.java new file mode 100644 index 000000000..595c0b652 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/ValidationException.java @@ -0,0 +1,16 @@ +package clean.code.design_patterns.requirements.Validate; + +public class ValidationException extends RuntimeException{ + public ValidationException(String message){super(message);} + public ValidationException(String message, Throwable cause) { + super(message, cause); + } + + public ValidationException(Throwable cause) { + super(cause); + } + + public ValidationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/Validator.java b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/Validator.java new file mode 100644 index 000000000..257b4c083 --- /dev/null +++ b/clean_code_projects/_2_project_requirements_design_patterns/src/main/java/clean/code/design_patterns/requirements/Validate/Validator.java @@ -0,0 +1,37 @@ +package clean.code.design_patterns.requirements.Validate; + +import clean.code.design_patterns.requirements.Domain.Doctor; + +public class Validator implements IValidator { + @Override + public void validate(Doctor doctor) throws ValidationException { + validateFirstName(doctor.getFirstName()); + validateLastName(doctor.getLastName()); + validateSpecialization(doctor.getSpecialization()); + validateSalary(doctor.getSalary()); + } + + private void validateSalary(double salary) { + if (salary <= 0.0) { + throw new ValidationException("The salary cannot be negative!"); + } + } + + private void validateSpecialization(String specialization) { + if (specialization == null || specialization.isEmpty()) { + throw new ValidationException("Please enter a specialization!"); + } + } + + private void validateLastName(String lastName) { + if (lastName == null || lastName.isEmpty()) { + throw new ValidationException("Please enter a last name!"); + } + } + + private void validateFirstName(String firstName) { + if (firstName == null || firstName.isEmpty()) { + throw new ValidationException("Please enter a first name!"); + } + } +} \ No newline at end of file