From d03eb7e8244bce031d66284b627041c528c901a1 Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sat, 28 Oct 2023 22:04:48 +0300 Subject: [PATCH] Add command factories. --- .../commands/factories/CommandFactory.java | 58 +++++++++++++++++++ .../cli/commands/factories/EntityFactory.java | 52 +++++++++++++++++ .../commands/factories/ReadAllFactory.java | 19 ++++++ 3 files changed, 129 insertions(+) create mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/CommandFactory.java create mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/EntityFactory.java create mode 100644 src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/ReadAllFactory.java diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/CommandFactory.java b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/CommandFactory.java new file mode 100644 index 0000000..b04bb03 --- /dev/null +++ b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/CommandFactory.java @@ -0,0 +1,58 @@ +package space.kklochko.jdbc_hospital_example.cli.commands.factories; + +import lombok.NonNull; +import space.kklochko.jdbc_hospital_example.cli.commands.CommandData; +import space.kklochko.jdbc_hospital_example.cli.commands.CommandEntity; +import space.kklochko.jdbc_hospital_example.db.repositories.AbstractRepository; +import space.kklochko.jdbc_hospital_example.models.Department; +import space.kklochko.jdbc_hospital_example.models.Indicator; +import space.kklochko.jdbc_hospital_example.models.Patient; + +import java.lang.reflect.Method; +import java.util.UUID; + +public class CommandFactory { + public CommandEntity create(@NonNull CommandData commandData, @NonNull AbstractRepository repository) { + try { + EntityFactory entityFactory = new EntityFactory(); + + if(commandData.getName().equals("insert")) { + if(commandData.getDatatype().equals("indicator")) { + Method method = repository.getClass().getMethod("create", Indicator.class); + Indicator indicator = (Indicator) entityFactory.create(commandData); + return new CommandEntity(repository, method, indicator); + }else if(commandData.getDatatype().equals("patient")) { + Method method = repository.getClass().getMethod("create", Patient.class); + Patient patient = (Patient) entityFactory.create(commandData); + return new CommandEntity(repository, method, patient); + }else { + Method method = repository.getClass().getMethod("create", Department.class); + Department department = (Department) entityFactory.create(commandData); + return new CommandEntity(repository, method, department); + } + }else if(commandData.getName().equals("update")) { + if(commandData.getDatatype().equals("indicator")) { + Method method = repository.getClass().getMethod("update", Indicator.class); + Indicator indicator = (Indicator) entityFactory.create(commandData); + return new CommandEntity(repository, method, indicator); + }else if(commandData.getDatatype().equals("patient")) { + Method method = repository.getClass().getMethod("update", Patient.class); + Patient patient = (Patient) entityFactory.create(commandData); + return new CommandEntity(repository, method, patient); + }else { + Method method = repository.getClass().getMethod("update", Department.class); + Department department = (Department) entityFactory.create(commandData); + return new CommandEntity(repository, method, department); + } + }else { + String uuidString = commandData.arguments.get("uuid"); + UUID uuid = UUID.fromString(uuidString); + + Method method = repository.getClass().getMethod("delete"); + return new CommandEntity(repository, method, uuid); + } + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/EntityFactory.java b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/EntityFactory.java new file mode 100644 index 0000000..1ca421e --- /dev/null +++ b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/EntityFactory.java @@ -0,0 +1,52 @@ +package space.kklochko.jdbc_hospital_example.cli.commands.factories; + +import lombok.NonNull; +import space.kklochko.jdbc_hospital_example.cli.commands.CommandData; +import space.kklochko.jdbc_hospital_example.models.Department; +import space.kklochko.jdbc_hospital_example.models.Indicator; +import space.kklochko.jdbc_hospital_example.models.Patient; + +import java.sql.Timestamp; +import java.util.Map; +import java.util.UUID; + +public class EntityFactory { + public Object create(@NonNull CommandData commandData) { + if(commandData.getDatatype().equals("indicator")) { + Map values = commandData.getArguments(); + Timestamp timestamp = Timestamp.valueOf(values.get("timestamp")); + Indicator indicator = new Indicator(values.get("type"), values.get("values"), timestamp); + + String uuidString = values.getOrDefault("id", null); + if(uuidString != null) { + UUID uuid = UUID.fromString(uuidString); + indicator.setId(uuid); + } + + return (Object) indicator; + }else if(commandData.getDatatype().equals("patient")) { + Map values = commandData.getArguments(); + short age = Short.parseShort(values.get("age")); + Patient patient = new Patient(values.get("name"), age, values.get("phone")); + + String uuidString = values.getOrDefault("id", null); + if(uuidString != null) { + UUID uuid = UUID.fromString(uuidString); + patient.setId(uuid); + } + + return (Object) patient; + }else { + Map values = commandData.getArguments(); + Department department = new Department(values.get("name"), values.get("location"), values.get("phone")); + + String uuidString = values.getOrDefault("id", null); + if(uuidString != null) { + UUID uuid = UUID.fromString(uuidString); + department.setId(uuid); + } + + return (Object) department; + } + } +} diff --git a/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/ReadAllFactory.java b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/ReadAllFactory.java new file mode 100644 index 0000000..17cc3ca --- /dev/null +++ b/src/main/java/space/kklochko/jdbc_hospital_example/cli/commands/factories/ReadAllFactory.java @@ -0,0 +1,19 @@ +package space.kklochko.jdbc_hospital_example.cli.commands.factories; + +import lombok.NonNull; +import space.kklochko.jdbc_hospital_example.cli.commands.CommandData; +import space.kklochko.jdbc_hospital_example.cli.commands.CommandEntities; +import space.kklochko.jdbc_hospital_example.db.repositories.AbstractRepository; + +import java.lang.reflect.Method; + +public class ReadAllFactory { + public CommandEntities create(@NonNull CommandData commandData, @NonNull AbstractRepository repository) { + try { + Method method = repository.getClass().getMethod("readAll"); + return new CommandEntities(repository, method); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } +}