diff --git a/1-Adapter/src/main/java/persistence/CSVCategoryPersistenceAdapter.java b/1-Adapter/src/main/java/persistence/CSVCategoryPersistenceAdapter.java index ff56cd5..86dff90 100644 --- a/1-Adapter/src/main/java/persistence/CSVCategoryPersistenceAdapter.java +++ b/1-Adapter/src/main/java/persistence/CSVCategoryPersistenceAdapter.java @@ -1,17 +1,22 @@ package persistence; +import abstraction.PersistenceAdapter; import category.Category; -import category.CategoryPersistenceAdapter; import java.util.Set; -public class CSVCategoryPersistenceAdapter implements CategoryPersistenceAdapter { +public class CSVCategoryPersistenceAdapter implements PersistenceAdapter { @Override public Set getAll() { return null; } + @Override + public Boolean remove(Category value) { + return null; + } + @Override public Boolean add(Category category) { return null; diff --git a/2-Application/src/main/java/category/CategoryIdGenerator.java b/2-Application/src/main/java/category/CategoryIdGenerator.java index 637fe15..4e22742 100644 --- a/2-Application/src/main/java/category/CategoryIdGenerator.java +++ b/2-Application/src/main/java/category/CategoryIdGenerator.java @@ -1,6 +1,5 @@ package category; -public interface CategoryIdGenerator -{ +public interface CategoryIdGenerator { CategoryId generateId(); } diff --git a/3-Domain/src/main/java/category/CategoryRepository.java b/3-Domain/src/main/java/category/CategoryRepository.java index dde235f..a858394 100644 --- a/3-Domain/src/main/java/category/CategoryRepository.java +++ b/3-Domain/src/main/java/category/CategoryRepository.java @@ -1,5 +1,8 @@ package category; +import abstraction.CustomSet; +import abstraction.PersistenceAdapter; +import abstraction.CustomSetPersistenceDecorator; import exeptions.CategoryAlreadyExists; import exeptions.NonUniqueId; @@ -8,12 +11,11 @@ import java.util.Set; public class CategoryRepository { - final private CategoryPersistenceAdapter categoryPersistenceAdapter; - final private Set categories; - public CategoryRepository(CategoryPersistenceAdapter categoryPersistenceAdapter) { - this.categoryPersistenceAdapter = categoryPersistenceAdapter; - this.categories = categoryPersistenceAdapter.getAll(); + final private CustomSet categories; + + public CategoryRepository(PersistenceAdapter categoryPersistenceAdapter) { + this.categories = new CustomSetPersistenceDecorator(categoryPersistenceAdapter); } public Optional getByName(CategoryName name) { @@ -25,16 +27,18 @@ public class CategoryRepository { } public Set getAll(){ - return categories; + return categories.getSet(); } public void add(Category category) { checkDuplicates(category); - categories.add(category); - categoryPersistenceAdapter.add(category); } + /** + * Check for duplicates with the domain rules + * @param category + */ private void checkDuplicates(Category category) { if (this.getByName(category.getName()).isPresent()) { throw new CategoryAlreadyExists("A category with the name " + category.getName() + " already exits."); diff --git a/3-Domain/src/main/java/exeptions/ElementAlreadyInSet.java b/3-Domain/src/main/java/exeptions/ElementAlreadyInSet.java new file mode 100644 index 0000000..894dcc9 --- /dev/null +++ b/3-Domain/src/main/java/exeptions/ElementAlreadyInSet.java @@ -0,0 +1,8 @@ +package exeptions; + +public class ElementAlreadyInSet extends RuntimeException { + + public ElementAlreadyInSet(String message) { + super(message); + } +} diff --git a/3-Domain/src/main/java/exeptions/ElementNotInSet.java b/3-Domain/src/main/java/exeptions/ElementNotInSet.java new file mode 100644 index 0000000..19faf2a --- /dev/null +++ b/3-Domain/src/main/java/exeptions/ElementNotInSet.java @@ -0,0 +1,8 @@ +package exeptions; + +public class ElementNotInSet extends RuntimeException { + + public ElementNotInSet(String message) { + super(message); + } +} diff --git a/3-Domain/src/main/java/exeptions/LinkAlreadyExists.java b/3-Domain/src/main/java/exeptions/LinkAlreadyExists.java new file mode 100644 index 0000000..d6e70a8 --- /dev/null +++ b/3-Domain/src/main/java/exeptions/LinkAlreadyExists.java @@ -0,0 +1,8 @@ +package exeptions; + +public class LinkAlreadyExists extends RuntimeException { + + public LinkAlreadyExists(String message) { + super(message); + } +} diff --git a/3-Domain/src/main/java/exeptions/LinkDoesNotExist.java b/3-Domain/src/main/java/exeptions/LinkDoesNotExist.java new file mode 100644 index 0000000..105b806 --- /dev/null +++ b/3-Domain/src/main/java/exeptions/LinkDoesNotExist.java @@ -0,0 +1,8 @@ +package exeptions; + +public class LinkDoesNotExist extends RuntimeException { + + public LinkDoesNotExist(String message) { + super(message); + } +} diff --git a/3-Domain/src/main/java/link/LinkRepository.java b/3-Domain/src/main/java/link/LinkRepository.java index 57b7a1a..298e39e 100644 --- a/3-Domain/src/main/java/link/LinkRepository.java +++ b/3-Domain/src/main/java/link/LinkRepository.java @@ -1,18 +1,19 @@ package link; +import abstraction.CustomSet; +import abstraction.CustomSetPersistenceDecorator; +import abstraction.PersistenceAdapter; import exeptions.LinkAlreadyExists; +import exeptions.LinkDoesNotExist; import java.util.Optional; -import java.util.Set; public class LinkRepository { - final private LinkPersistenceAdapter linkPersistenceAdapter; - final private Set links; + final private CustomSet links; - public LinkRepository(LinkPersistenceAdapter linkPersistenceAdapter) { - this.linkPersistenceAdapter = linkPersistenceAdapter; - this.links = linkPersistenceAdapter.getAll(); + public LinkRepository(PersistenceAdapter linkPersistenceAdapter) { + this.links = new CustomSetPersistenceDecorator(linkPersistenceAdapter); } public Optional getById(LinkId id) { @@ -23,10 +24,25 @@ public class LinkRepository { return links.stream().filter(link -> link.getUrl().equals(url)).findFirst(); } + public void removeById(LinkId id) { + getById(id).ifPresentOrElse(this::remove, () -> { + throw new LinkDoesNotExist("Tried removing a link with id " + id + " but it does not exist."); + }); + } + + public void removeByUrl(LinkUrl url) { + getByUrl(url).ifPresentOrElse(this::remove, () -> { + throw new LinkDoesNotExist("Tried removing a link with url " + url + " but it does not exist."); + }); + } + public void add(Link link) { checkDuplicates(link); + links.add(link); + } - + private void remove(Link link) { + links.remove(link); } private void checkDuplicates(Link newLink) {