diff --git a/0-Plugin/src/main/java/main/Main.java b/0-Plugin/src/main/java/main/Main.java index 7e72624..2bfe90d 100644 --- a/0-Plugin/src/main/java/main/Main.java +++ b/0-Plugin/src/main/java/main/Main.java @@ -4,11 +4,8 @@ import tag.TagName; public class Main { - - - public static void main(String[]args){ + public static void main(String[] args) { TagName test = new TagName("ds"); System.out.println(test); } - } diff --git a/3-Domain/src/main/java/tag/OptionalTag.java b/3-Domain/src/main/java/tag/OptionalTag.java new file mode 100644 index 0000000..85e703b --- /dev/null +++ b/3-Domain/src/main/java/tag/OptionalTag.java @@ -0,0 +1,23 @@ +package tag; + +import java.util.Collection; +import java.util.Optional; + +public record OptionalTag(Optional tag) { + + public Optional getTag() { + return tag; + } + + public static OptionalTag of(Tag tag) { + return new OptionalTag(Optional.of(tag)); + } + + public static OptionalTag empty() { + return new OptionalTag(Optional.empty()); + } + + void addTo(Collection collection) { + if (tag.isPresent()) collection.add(tag.get()); + } +} diff --git a/3-Domain/src/main/java/tag/Tag.java b/3-Domain/src/main/java/tag/Tag.java index b40463c..8e6ac83 100644 --- a/3-Domain/src/main/java/tag/Tag.java +++ b/3-Domain/src/main/java/tag/Tag.java @@ -1,5 +1,22 @@ package tag; -public record Tag(TagName name, String additionalData) { +import java.util.Optional; +public class Tag { + + private TagName name; + private Optional additionalData; + + public Tag(TagName name) { + this.name = name; + } + + public Tag(TagName name, Optional additionalData) { + this.name = name; + this.additionalData = additionalData; + } + + public Tag addAdditionalData(String additionalData) { + return new Tag(this.name, Optional.of(additionalData)); + } } diff --git a/3-Domain/src/main/java/tag/TagMatcher.java b/3-Domain/src/main/java/tag/TagMatcher.java index 58bc29b..86177b7 100644 --- a/3-Domain/src/main/java/tag/TagMatcher.java +++ b/3-Domain/src/main/java/tag/TagMatcher.java @@ -2,9 +2,11 @@ package tag; import link.LinkUrl; +import java.util.Collection; import java.util.Optional; public interface TagMatcher { - Optional matches(LinkUrl linkUrl); + OptionalTag ifMatches(LinkUrl linkUrl); + } diff --git a/3-Domain/src/main/java/tag/TagMatcherRepository.java b/3-Domain/src/main/java/tag/TagMatcherRepository.java new file mode 100644 index 0000000..c609884 --- /dev/null +++ b/3-Domain/src/main/java/tag/TagMatcherRepository.java @@ -0,0 +1,18 @@ +package tag; + +import java.util.HashSet; +import java.util.Set; + +public class TagMatcherRepository { + + Set tagMatchers = Set.of(); + + public TagMatcherRepository(final TagPersistenceAdapter tagPersistenceAdapter, final Set staticTagMatchers) { + tagMatchers.addAll(staticTagMatchers); + tagMatchers.addAll(tagPersistenceAdapter.getCustomTagMatchers()); + } + + public Set getTagMatchers() { + return new HashSet<>(tagMatchers); + } +} diff --git a/3-Domain/src/main/java/tag/TagPersistenceAdapter.java b/3-Domain/src/main/java/tag/TagPersistenceAdapter.java new file mode 100644 index 0000000..c257db0 --- /dev/null +++ b/3-Domain/src/main/java/tag/TagPersistenceAdapter.java @@ -0,0 +1,9 @@ +package tag; + +import java.util.Set; + +public interface TagPersistenceAdapter { + + Set getCustomTagMatchers(); + +} diff --git a/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java b/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java index 322dccb..083aaa6 100644 --- a/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java +++ b/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java @@ -1,11 +1,11 @@ package tag.matcherImplementations; import link.LinkUrl; +import tag.OptionalTag; import tag.Tag; import tag.TagMatcher; import tag.TagName; -import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -20,13 +20,13 @@ public class CustomTagMatcher implements TagMatcher { } @Override - public Optional matches(LinkUrl linkUrl) { + public OptionalTag ifMatches(LinkUrl linkUrl) { Matcher matcher = regex.matcher(linkUrl.toString()); if (matcher.find()) { - return Optional.of(new Tag(this.tagName, "")); + return OptionalTag.of(new Tag(this.tagName)); } - return Optional.empty(); + return OptionalTag.empty(); } } diff --git a/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java b/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java index b87ebec..5acf3e1 100644 --- a/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java +++ b/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java @@ -1,12 +1,11 @@ package tag.matcherImplementations; import link.LinkUrl; +import tag.OptionalTag; import tag.Tag; import tag.TagMatcher; import tag.TagName; -import java.util.Optional; - public class GitHubTagMatcher implements TagMatcher { public TagName getName() { @@ -14,14 +13,14 @@ public class GitHubTagMatcher implements TagMatcher { } public String getAdditionInfo() { - return null; + return "";//TODO } @Override - public Optional matches(LinkUrl linkUrl) { + public OptionalTag ifMatches(LinkUrl linkUrl) { if (linkUrl.getUrl().getHost().equals("github.com")) { - return Optional.of(new Tag(getName(), getAdditionInfo())); + return OptionalTag.of(new Tag(getName()).addAdditionalData(getAdditionInfo())); } - return Optional.empty(); + return OptionalTag.empty(); } }