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
+
+
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/ContactDtoRepository.java b/src/main/java/ua/com/javarush/gnew/m2/repository/ContactDtoRepository.java
index 0381963..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
@@ -1,17 +1,57 @@
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 ua.com.javarush.gnew.m2.dto.ContactDto;
public interface ContactDtoRepository {
- List findAll();
+ ObjectMapper objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT);
+ 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));
+ }
+
- Optional findById(long id);
+ default Optional findById(long id) throws IOException {
+ return findAll().stream().filter(contact -> contact.getId() == id).findFirst();
+ }
- void deleteById(long id);
+ 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 + " не найден.");
+ }
+ }
- void saveAll(List contacts);
+ 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());
+ }
}
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 "";
+ }
+}