From a1a67b3a7c0b8291cc822f69552cbebe272750c1 Mon Sep 17 00:00:00 2001 From: qvalentin Date: Fri, 22 Apr 2022 10:30:06 +0200 Subject: [PATCH] Add Generic way of calling Persistence Adapter when the state of a set changes --- .../src/main/java/abstraction/CustomSet.java | 17 +++++++ .../CustomSetPersistenceDecorator.java | 43 +++++++++++++++++ .../java/abstraction/CustomStrictSet.java | 47 +++++++++++++++++++ .../java/abstraction/PersistenceAdapter.java | 11 +++++ .../category/CategoryPersistenceAdapter.java | 10 ---- .../java/link/LinkPersistenceAdapter.java | 10 ---- 6 files changed, 118 insertions(+), 20 deletions(-) create mode 100644 3-Domain/src/main/java/abstraction/CustomSet.java create mode 100644 3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java create mode 100644 3-Domain/src/main/java/abstraction/CustomStrictSet.java create mode 100644 3-Domain/src/main/java/abstraction/PersistenceAdapter.java delete mode 100644 3-Domain/src/main/java/category/CategoryPersistenceAdapter.java delete mode 100644 3-Domain/src/main/java/link/LinkPersistenceAdapter.java diff --git a/3-Domain/src/main/java/abstraction/CustomSet.java b/3-Domain/src/main/java/abstraction/CustomSet.java new file mode 100644 index 0000000..43a7fc5 --- /dev/null +++ b/3-Domain/src/main/java/abstraction/CustomSet.java @@ -0,0 +1,17 @@ +package abstraction; + +import java.util.Set; +import java.util.stream.Stream; + +public interface CustomSet { + + + + Stream stream(); + + boolean add(T value); + + boolean remove(T value); + + Set getSet(); +} diff --git a/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java b/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java new file mode 100644 index 0000000..c81d5dd --- /dev/null +++ b/3-Domain/src/main/java/abstraction/CustomSetPersistenceDecorator.java @@ -0,0 +1,43 @@ +package abstraction; + +import java.util.Set; +import java.util.stream.Stream; + +/** + * A Decorator to intercept all state changes on a set and sync them with the persistence layer of the + * application. + * @param The data type that should be stored and updated in the persistence layer + */ +public class CustomSetPersistenceDecorator implements CustomSet { + + private final CustomSet set; + private final PersistenceAdapter persistenceAdapter; + + public CustomSetPersistenceDecorator(PersistenceAdapter persistenceAdapter) { + this.persistenceAdapter = persistenceAdapter; + this.set = new CustomStrictSet(persistenceAdapter.getAll()); + } + + @Override + public Stream stream(){ + return set.stream(); + } + + @Override + public boolean add(T value){ + persistenceAdapter.add(value); + return set.add(value); + } + + @Override + public boolean remove(T value) { + persistenceAdapter.remove(value); + return this.set.remove(value); + } + + @Override + public Set getSet() { + return this.set.getSet(); + } + +} diff --git a/3-Domain/src/main/java/abstraction/CustomStrictSet.java b/3-Domain/src/main/java/abstraction/CustomStrictSet.java new file mode 100644 index 0000000..e67c5ab --- /dev/null +++ b/3-Domain/src/main/java/abstraction/CustomStrictSet.java @@ -0,0 +1,47 @@ +package abstraction; + +import exeptions.ElementAlreadyInSet; +import exeptions.ElementNotInSet; + +import java.util.Set; +import java.util.stream.Stream; + +public class CustomStrictSet implements CustomSet { + + private final Set set; + + public CustomStrictSet(Set set) { + this.set = set; + } + + @Override + public Stream stream() { + return this.set.stream(); + } + + @Override + public Set getSet() { + return this.set; + } + + @Override + public boolean add(T value) { + + if (this.set.contains(value)) { + throw new ElementAlreadyInSet("Tried adding " + value + " of class " + value + .getClass() + .getName() + " but the set already contains it."); + } + return this.set.add(value); + } + + @Override + public boolean remove(T value) { + if (!this.set.contains(value)) { + throw new ElementNotInSet("Tried removing " + value + " of class " + value + .getClass() + .getName() + " but the set not contains it."); + } + return this.set.remove(value); + } +} diff --git a/3-Domain/src/main/java/abstraction/PersistenceAdapter.java b/3-Domain/src/main/java/abstraction/PersistenceAdapter.java new file mode 100644 index 0000000..98ee6b8 --- /dev/null +++ b/3-Domain/src/main/java/abstraction/PersistenceAdapter.java @@ -0,0 +1,11 @@ +package abstraction; + +import java.util.Set; + +public interface PersistenceAdapter { + + Set getAll(); + Boolean add(T value); + Boolean remove(T value); + +} diff --git a/3-Domain/src/main/java/category/CategoryPersistenceAdapter.java b/3-Domain/src/main/java/category/CategoryPersistenceAdapter.java deleted file mode 100644 index 75783e8..0000000 --- a/3-Domain/src/main/java/category/CategoryPersistenceAdapter.java +++ /dev/null @@ -1,10 +0,0 @@ -package category; - -import java.util.Set; - -public interface CategoryPersistenceAdapter { - - Set getAll(); - Boolean add(Category category); - -} diff --git a/3-Domain/src/main/java/link/LinkPersistenceAdapter.java b/3-Domain/src/main/java/link/LinkPersistenceAdapter.java deleted file mode 100644 index a945e7b..0000000 --- a/3-Domain/src/main/java/link/LinkPersistenceAdapter.java +++ /dev/null @@ -1,10 +0,0 @@ -package link; - -import java.util.Set; - -public interface LinkPersistenceAdapter { - - Set getAll(); - Boolean add(Link link); - -}