From 797999a868d864ff43a37539c3226b0cee615cde Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 04:37:02 +0200 Subject: [PATCH 1/4] upgrd interface --- .../m2/repository/ContactDtoRepository.java | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java index 0381963..487bf64 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java +++ b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java @@ -1,17 +1,59 @@ package ua.com.javarush.gnew.m2.repository; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import lombok.SneakyThrows; import ua.com.javarush.gnew.m2.dto.ContactDto; public interface ContactDtoRepository { - List findAll(); - - Optional findById(long id); + ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); + @SneakyThrows + default List findAll() throws IOException { + File file = new File("demo.st"); + if (!file.exists()) { + return new ArrayList<>(); + } + return objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); + } - void deleteById(long id); + @SneakyThrows + default Optional findById(long id) throws IOException { + return findAll().stream().filter(contact -> contact.getId() == id).findFirst(); + } - void saveAll(List contacts); + default void deleteById(long id) throws IOException { + Optional contactToDelete = findById(id); + if (contactToDelete.isPresent()) { + List contacts = findAll(); + contacts.remove(contactToDelete.get()); + saveAll(contacts); + } else { + System.out.println("Контакт с id " + id + " не найден."); + } + } + @SneakyThrows + default void saveAll(List contacts) throws IOException { + objectMapper.writeValue(new File("demo.st"),contacts); + }; - void save(ContactDto contactDto); + default void save(ContactDto contactDto) throws IOException { + List contacts = findAll(); + contacts.add(contactDto); + saveAll(contacts); + } + default List findByKeyword(String keyword) throws IOException { + List contacts = findAll(); + return contacts.stream() + .filter(contact -> contact.getFullName().contains(keyword) || + contact.getPhones().stream().anyMatch(phones -> phones.contains(keyword)) || + contact.getEmails().stream().anyMatch(emails -> emails.contains(keyword))) + .collect(Collectors.toList()); + } } From 0d5ce596b11ab31ae4b12a256a2fb2d921dbc13a Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 06:50:16 +0200 Subject: [PATCH 2/4] delete @SneakyThrows and added Jksn depend --- .../javarush/gnew/m2/repository/ContactDtoRepository.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java index 487bf64..5d53195 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java +++ b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java @@ -9,12 +9,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import lombok.SneakyThrows; import ua.com.javarush.gnew.m2.dto.ContactDto; public interface ContactDtoRepository { ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); - @SneakyThrows default List findAll() throws IOException { File file = new File("demo.st"); if (!file.exists()) { @@ -23,7 +21,7 @@ default List findAll() throws IOException { return objectMapper.readValue(file, objectMapper.getTypeFactory().constructCollectionType(List.class, ContactDto.class)); } - @SneakyThrows + default Optional findById(long id) throws IOException { return findAll().stream().filter(contact -> contact.getId() == id).findFirst(); } @@ -38,10 +36,10 @@ default void deleteById(long id) throws IOException { System.out.println("Контакт с id " + id + " не найден."); } } - @SneakyThrows + default void saveAll(List contacts) throws IOException { objectMapper.writeValue(new File("demo.st"),contacts); - }; + } default void save(ContactDto contactDto) throws IOException { List contacts = findAll(); From b97b256fe0246fd48b90ce337ff70df496d0c286 Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 06:53:39 +0200 Subject: [PATCH 3/4] delete @SneakyThrows and added Jksn depend --- pom.xml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pom.xml b/pom.xml index 5e0cab1..7f860a7 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,25 @@ picocli 4.7.6 + + + com.fasterxml.jackson.core + jackson-core + 2.18.1 + + + + com.fasterxml.jackson.core + jackson-databind + 2.18.1 + + + + com.fasterxml.jackson.core + jackson-annotations + 2.18.1 + + From 44c37c6fd877241dc27c291738521f1300d2e232 Mon Sep 17 00:00:00 2001 From: Denys Date: Fri, 8 Nov 2024 08:48:46 +0200 Subject: [PATCH 4/4] delete @SneakyThrows and added Jksn depend --- .../javarush/gnew/m2/cli/PhoneBookCLI.java | 44 +++++++++++++------ .../m2/repository/ForSettingsRepository.java | 26 +++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 src/main/java/ua/com/javarush/gnew/m2/repository/ForSettingsRepository.java diff --git a/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java b/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java index 3830973..edf788a 100644 --- a/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java +++ b/src/main/java/ua/com/javarush/gnew/m2/cli/PhoneBookCLI.java @@ -8,33 +8,51 @@ import ua.com.javarush.gnew.m2.cli.commands.ListContacts; import ua.com.javarush.gnew.m2.cli.commands.SearchContact; import ua.com.javarush.gnew.m2.cli.commands.SetUser; +import ua.com.javarush.gnew.m2.repository.ForSettingsRepository; import ua.com.javarush.gnew.m2.service.PhoneBookInterface; +import ua.com.javarush.gnew.m2.service.SettingsService; +import ua.com.javarush.gnew.m2.service.SettingsServiceInterface; import ua.com.javarush.gnew.m2.service.SimplePhoneBook; +import java.util.concurrent.Callable; + @Command( - name = "phonebook", - mixinStandardHelpOptions = true, - version = "PhoneBook CLI 1.0", - description = "CLI для управління контактами в телефонній книзі") + name = "phonebook", + mixinStandardHelpOptions = true, + version = "PhoneBook CLI 1.0", + description = "CLI для управління контактами в телефонній книзі" +) public class PhoneBookCLI implements CliCommand { + private final SettingsServiceInterface settingsService; + + public PhoneBookCLI(SettingsServiceInterface settingsService) { + this.settingsService = settingsService; + } + @Override public Integer call() { - System.out.println("Використовуйте одну з команд: user, add, search, edit, delete, list"); + System.out.println("Використовуйте одну з команд: user, add, search, edit, delete, list, locale"); return 0; } public static int init(String[] args) { PhoneBookInterface phoneBook = new SimplePhoneBook(); + SettingsServiceInterface settingsService = new SettingsService(new ForSettingsRepository()); - return new CommandLine(new PhoneBookCLI()) - .addSubcommand("add", new AddContact(phoneBook)) - .addSubcommand("search", new SearchContact(phoneBook)) - .addSubcommand("edit", new EditContact(phoneBook)) - .addSubcommand("delete", new DeleteContact(phoneBook)) - .addSubcommand("list", new ListContacts(phoneBook)) - .addSubcommand("user", new SetUser()) - .execute(args); + return new CommandLine(new PhoneBookCLI(settingsService)) + .addSubcommand("add", new AddContact(phoneBook)) + .addSubcommand("search", new SearchContact(phoneBook)) + .addSubcommand("edit", new EditContact(phoneBook)) + .addSubcommand("delete", new DeleteContact(phoneBook)) + .addSubcommand("list", new ListContacts(phoneBook)) + .addSubcommand("user", new SetUser()) + .addSubcommand("locale", (Callable) () -> { + settingsService.setLocale("uk"); + System.out.println("Locale set to Ukrainian."); + return 0; + }) + .execute(args); } } diff --git a/src/main/java/ua/com/javarush/gnew/m2/repository/ForSettingsRepository.java b/src/main/java/ua/com/javarush/gnew/m2/repository/ForSettingsRepository.java new file mode 100644 index 0000000..1265045 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/m2/repository/ForSettingsRepository.java @@ -0,0 +1,26 @@ +package ua.com.javarush.gnew.m2.repository; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class ForSettingsRepository implements SettingsRepository { + + @Override + public void save(Map settings) throws IOException { + } + + @Override + public Map load() throws IOException { + return new HashMap<>(); + } + + @Override + public void saveSingleSetting(String key, String value) throws IOException { + } + + @Override + public String loadSingleSetting(String key) throws IOException { + return ""; + } +}