parent
7f9af282a3
commit
8f546f426f
@ -0,0 +1,19 @@
|
|||||||
|
package space.kklochko.jdbc_hospital_example;
|
||||||
|
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.CLI;
|
||||||
|
import space.kklochko.jdbc_hospital_example.config.factories.LoadDataBaseConfigFromEnvFile;
|
||||||
|
import space.kklochko.jdbc_hospital_example.config.models.DataBaseConfig;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class Main {
|
||||||
|
public static void main(String[] args) throws SQLException {
|
||||||
|
DataBaseConfig db = (new LoadDataBaseConfigFromEnvFile()).load();
|
||||||
|
DataBaseConnection dbc = new DataBaseConnection(db);
|
||||||
|
|
||||||
|
CLI cli = new CLI(dbc);
|
||||||
|
cli.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,133 @@
|
|||||||
|
package space.kklochko.jdbc_hospital_example.cli;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NonNull;
|
||||||
|
import lombok.Setter;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.commands.CommandData;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.commands.CommandEntities;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.commands.CommandEntity;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.commands.factories.CommandFactory;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.commands.factories.ReadAllFactory;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.parsers.CommandParser;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.validators.InputStringFormatValidator;
|
||||||
|
import space.kklochko.jdbc_hospital_example.cli.validators.Validator;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.factories.DataBaseConnection;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.repositories.AbstractRepository;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.repositories.DepartmentRepository;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.repositories.IndicatorRepository;
|
||||||
|
import space.kklochko.jdbc_hospital_example.db.repositories.PatientRepository;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Scanner;
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
public class CLI {
|
||||||
|
private final String prompt = "> ";
|
||||||
|
private String state = "prompt";
|
||||||
|
private final String help = "Help (help or h)\n" +
|
||||||
|
"Command format: `command {item}(arg1=value1, ...`\n\n" +
|
||||||
|
|
||||||
|
"Commands: \n" +
|
||||||
|
"insert {item}({args}): \n" +
|
||||||
|
"update {item}({args}): \n" +
|
||||||
|
"readAll {item}: \n" +
|
||||||
|
"delete {item}(uuid='07c6e39e-727a-11ee-8e7b-c0e4349366ab'}).\n" +
|
||||||
|
|
||||||
|
"Examples:\n" +
|
||||||
|
|
||||||
|
"\nDepartment:\n" +
|
||||||
|
"\tinsert department(id='bcbbcdb4-702c-11ee-9113-c0e4349366cb', name='First department', location='Stepan Bandera Street', phone='380123451244')\n" +
|
||||||
|
"\tinsert department(name='First department', location='Stepan Bandera Street', phone='380123451244')\n" +
|
||||||
|
"\tupdate department(id='bcbbcdb4-702c-11ee-9113-c0e4349366cb', name='First department', location='Stepan Bandera Street', phone='380123451244')\n" +
|
||||||
|
"\treadAll department()\n" +
|
||||||
|
"\tremove department(id='bcbbcdb4-702c-11ee-9113-c0e4349366cb')\n" +
|
||||||
|
|
||||||
|
"\nPatient:\n" +
|
||||||
|
"\tinsert patient(id='bcbbcdb4-702c-11ee-9113-c0e4349366bb', name='Oleh', age='21', phone='380123451234')\n" +
|
||||||
|
"\tinsert patient(name='Oleh', age='21', phone='380123451234')\n" +
|
||||||
|
"\tupdate patient(id='bcbbcdb4-702c-11ee-9113-c0e4349366bb', name='Oleh', age='21', phone='380123451234')\n" +
|
||||||
|
"\treadAll patient()\n" +
|
||||||
|
"\tremove patient(id='bcbbcdb4-702c-11ee-9113-c0e4349366bb')\n" +
|
||||||
|
|
||||||
|
"\nIndicators:\n" +
|
||||||
|
"\tinsert indicator(id='07c6e39e-727a-11ee-8e7b-c0e4349366ab', type='blood245', values='well maybe', timestamp='2023-10-17 14:30:00')\n" +
|
||||||
|
"\tinsert indicator(type='blood246', values='well maybe', timestamp='2023-10-17 14:30:00')\n" +
|
||||||
|
"\tupdate indicator(id='07c6e39e-727a-11ee-8e7b-c0e4349366ab', type='blood247', values='well maybe', timestamp='2023-10-17 14:30:00')\n" +
|
||||||
|
"\treadAll indicator()\n" +
|
||||||
|
"\tremove indicator(id='07c6e39e-727a-11ee-8e7b-c0e4349366ab')\n";
|
||||||
|
|
||||||
|
DataBaseConnection dbc;
|
||||||
|
|
||||||
|
public CLI(DataBaseConnection dbc) {
|
||||||
|
this.dbc = dbc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
Scanner reader = new Scanner(System.in);
|
||||||
|
String line = "";
|
||||||
|
CommandData commandData;
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
if(getState() == "prompt") {
|
||||||
|
System.out.print(prompt);
|
||||||
|
setState("waitInput");
|
||||||
|
}else if(getState() == "waitInput") {
|
||||||
|
line = reader.nextLine();
|
||||||
|
setState("isHelp?");
|
||||||
|
}else if(getState() == "isHelp?") {
|
||||||
|
if(line.equals("h") || line.equals("help")) {
|
||||||
|
System.out.println(help);
|
||||||
|
setState("prompt");
|
||||||
|
}else {
|
||||||
|
setState("validate");
|
||||||
|
}
|
||||||
|
} else if(getState() == "validate") {
|
||||||
|
ArrayList<Validator> validators = new ArrayList<>();
|
||||||
|
validators.add(new InputStringFormatValidator(line));
|
||||||
|
|
||||||
|
setState("run");
|
||||||
|
|
||||||
|
for (Validator validator : validators) {
|
||||||
|
if(!validator.isValid()) {
|
||||||
|
System.err.println(validator.getMessage());
|
||||||
|
System.out.println();
|
||||||
|
setState("prompt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if(getState() == "run") {
|
||||||
|
CommandParser commandParser = new CommandParser();
|
||||||
|
commandData = commandParser.parse(line);
|
||||||
|
|
||||||
|
runCommand(commandData);
|
||||||
|
setState("prompt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void runCommand(CommandData commandData) {
|
||||||
|
if(commandData.getName().equals("readAll")) {
|
||||||
|
ReadAllFactory factory = new ReadAllFactory();
|
||||||
|
CommandEntities command = factory.create(commandData, getRepository(commandData));
|
||||||
|
ArrayList items = command.run();
|
||||||
|
|
||||||
|
for(Iterator iter = command.run().iterator(); iter.hasNext(); ) {
|
||||||
|
System.out.println(iter.next());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
CommandFactory factory = new CommandFactory();
|
||||||
|
CommandEntity command = factory.create(commandData, getRepository(commandData));
|
||||||
|
command.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public AbstractRepository getRepository(@NonNull CommandData commandData) {
|
||||||
|
if(commandData.getDatatype().equals("indicator")) {
|
||||||
|
return new IndicatorRepository(dbc);
|
||||||
|
}else if(commandData.getDatatype().equals("patient")) {
|
||||||
|
return new PatientRepository(dbc);
|
||||||
|
}else {
|
||||||
|
return new DepartmentRepository(dbc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue