From a453a01ff9fe47e2b0146b6d8695595d17658b01 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 22 Apr 2022 16:41:20 +0200 Subject: [PATCH] Add generic DAO with CSV implementation --- .../main/java/persistence/GenericCSVDAO.java | 71 +++++++++++++++++++ .../src/main/java/persistence/GenericDAO.java | 16 +++++ .../java/persistence/csv/CSVSerializable.java | 10 +++ 3 files changed, 97 insertions(+) create mode 100644 0-Plugin/src/main/java/persistence/GenericCSVDAO.java create mode 100644 1-Adapter/src/main/java/persistence/GenericDAO.java create mode 100644 1-Adapter/src/main/java/persistence/csv/CSVSerializable.java diff --git a/0-Plugin/src/main/java/persistence/GenericCSVDAO.java b/0-Plugin/src/main/java/persistence/GenericCSVDAO.java new file mode 100644 index 0000000..6c02bfd --- /dev/null +++ b/0-Plugin/src/main/java/persistence/GenericCSVDAO.java @@ -0,0 +1,71 @@ +package persistence; + +import persistence.csv.CSVSerializable; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class GenericCSVDAO implements GenericDAO { + + private final File file; + private final Function constructor; + + public GenericCSVDAO(File file, Function constructor) { + this.file = file; + this.constructor = constructor; + } + + public Set getALl() { + var lines = new ArrayList(); + try (BufferedReader br = new BufferedReader(new FileReader(this.file))) { + for (String line; (line = br.readLine()) != null; ) { + lines.add(line); + } + } + catch (IOException e) { + e.printStackTrace(); + } + + return lines + .stream() + .map(line -> constructor.apply(line.split(CSVSerializable.seperator))) + .collect(Collectors.toSet()); + } + + @Override + public void remove(T value) { + var allEntities = this.getALl(); + this.removeAll(); + + allEntities.stream().filter(entity -> !entity.equals(value)).forEach(this::add); + } + + @Override + public void add(T value) { + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(this.file, true))) { + bufferedWriter.write(value.toCSVString()); + bufferedWriter.newLine(); + } + catch (IOException e) { + e.printStackTrace(); + } + } + + public void removeAll() { + + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(this.file, true))) { + bufferedWriter.write(""); + } + catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/1-Adapter/src/main/java/persistence/GenericDAO.java b/1-Adapter/src/main/java/persistence/GenericDAO.java new file mode 100644 index 0000000..8817996 --- /dev/null +++ b/1-Adapter/src/main/java/persistence/GenericDAO.java @@ -0,0 +1,16 @@ +package persistence; + +import persistence.category.CategoryEntity; + +import java.util.Set; +import java.util.function.Function; + +public interface GenericDAO { + + public Set getALl(); + + void remove(T value); + + void add(T value); + +} diff --git a/1-Adapter/src/main/java/persistence/csv/CSVSerializable.java b/1-Adapter/src/main/java/persistence/csv/CSVSerializable.java new file mode 100644 index 0000000..48e2020 --- /dev/null +++ b/1-Adapter/src/main/java/persistence/csv/CSVSerializable.java @@ -0,0 +1,10 @@ +package persistence.csv; + +public interface CSVSerializable { + + static String seperator = ","; + + String[] getHeaders(); + + String toCSVString(); +}