dev #36
@ -1,26 +1,16 @@
|
|||||||
package ru.kamask.pet.todo;
|
package ru.kamask.pet.todo;
|
||||||
|
|
||||||
import ru.kamask.pet.todo.model.SimpleTask;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import ru.kamask.pet.todo.cli.CliEngine;
|
||||||
import ru.kamask.pet.todo.repo.InMemoryTaskRepository;
|
import ru.kamask.pet.todo.repo.InMemoryTaskRepository;
|
||||||
import ru.kamask.pet.todo.service.TaskService;
|
import ru.kamask.pet.todo.service.TaskService;
|
||||||
|
|
||||||
public class TodoApp {
|
public class TodoApp {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
public static void main(String[] args) {
|
|
||||||
var service = new TaskService(new InMemoryTaskRepository());
|
var service = new TaskService(new InMemoryTaskRepository());
|
||||||
|
var cli = new CliEngine(service);
|
||||||
service.create("Задача номер один");
|
cli.start();
|
||||||
service.create("Задача номер два");
|
|
||||||
service.create("Задача номер три");
|
|
||||||
service.create("Задача номер четыре");
|
|
||||||
|
|
||||||
System.out.println(service.list());
|
|
||||||
|
|
||||||
service.complete(2);
|
|
||||||
service.getById(2).ifPresent(task -> System.out.println(((SimpleTask) task).data()));
|
|
||||||
|
|
||||||
service.remove(3);
|
|
||||||
System.out.println(service.list());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
71
todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java
Normal file
71
todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package ru.kamask.pet.todo.cli;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import ru.kamask.pet.todo.service.TaskService;
|
||||||
|
|
||||||
|
public class CliEngine {
|
||||||
|
private HashMap<String, Command> registry = new HashMap<>();
|
||||||
|
private TaskService service;
|
||||||
|
private BufferedReader reader;
|
||||||
|
|
||||||
|
public CliEngine(TaskService service) {
|
||||||
|
this.service = service;
|
||||||
|
reader = new BufferedReader(new InputStreamReader(System.in));
|
||||||
|
initializeCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() throws IOException {
|
||||||
|
System.out.println("\nДобро пожаловать в Список задач 2.0!");
|
||||||
|
System.out.println("Введите help для просмтора доступных команд или exit для выхода.");
|
||||||
|
while (true) {
|
||||||
|
System.out.print("\ntodo> ");
|
||||||
|
var input = reader.readLine().trim();
|
||||||
|
System.out.println();
|
||||||
|
switch (input) {
|
||||||
|
case "help" -> handleHelp();
|
||||||
|
case "exit" -> System.exit(0);
|
||||||
|
default -> handleCommand(input).ifPresentOrElse(System.out::println, () -> {
|
||||||
|
System.out.println("Не известная команда. Повторите ввод.\n");
|
||||||
|
handleHelp();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void registerCommand(Command command) {
|
||||||
|
registry.put(command.name(), command);
|
||||||
|
}
|
||||||
|
|
||||||
|
void initializeCommands() {
|
||||||
|
registerCommand(new CreateCommand());
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleHelp() {
|
||||||
|
var template = " %-30s // %s";
|
||||||
|
System.out.println("Доступные команды:\n");
|
||||||
|
registry.values().stream()
|
||||||
|
.map(handler -> String.format(template, handler.example(), handler.description()))
|
||||||
|
.forEach(System.out::println);
|
||||||
|
System.out.println();
|
||||||
|
System.out.printf(template, "help", "Вот этот список команд\n");
|
||||||
|
System.out.printf(template, "exit", "Выход, но лучше не надо)\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<String> handleCommand(String input) {
|
||||||
|
var parts = input.split("\\s+");
|
||||||
|
var command = parts[0];
|
||||||
|
var args = Arrays.copyOfRange(parts, 1, parts.length);
|
||||||
|
|
||||||
|
var handlerOpt = Optional.ofNullable(registry.get(command));
|
||||||
|
if (handlerOpt.isPresent())
|
||||||
|
return handlerOpt.get().handle(args, service);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
15
todo/src/main/java/ru/kamask/pet/todo/cli/Command.java
Normal file
15
todo/src/main/java/ru/kamask/pet/todo/cli/Command.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package ru.kamask.pet.todo.cli;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import ru.kamask.pet.todo.service.TaskService;
|
||||||
|
|
||||||
|
public interface Command {
|
||||||
|
Optional<String> handle(String[] args, TaskService service);
|
||||||
|
|
||||||
|
String name();
|
||||||
|
|
||||||
|
String example();
|
||||||
|
|
||||||
|
String description();
|
||||||
|
}
|
||||||
28
todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java
Normal file
28
todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package ru.kamask.pet.todo.cli;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import ru.kamask.pet.todo.service.TaskService;
|
||||||
|
|
||||||
|
public class CreateCommand implements Command {
|
||||||
|
@Override
|
||||||
|
public String name() {
|
||||||
|
return "create";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<String> handle(String[] args, TaskService service) {
|
||||||
|
// TODO create new todo
|
||||||
|
return Optional.of("Добавление новой задачи");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String example() {
|
||||||
|
return name() + " <title>";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String description() {
|
||||||
|
return "Добавление новой задачи";
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user