diff --git a/3-Domain/src/main/java/tag/Tag.java b/3-Domain/src/main/java/tag/Tag.java new file mode 100644 index 0000000..b40463c --- /dev/null +++ b/3-Domain/src/main/java/tag/Tag.java @@ -0,0 +1,5 @@ +package tag; + +public record Tag(TagName name, String additionalData) { + +} diff --git a/3-Domain/src/main/java/tag/TagMatcher.java b/3-Domain/src/main/java/tag/TagMatcher.java new file mode 100644 index 0000000..58bc29b --- /dev/null +++ b/3-Domain/src/main/java/tag/TagMatcher.java @@ -0,0 +1,10 @@ +package tag; + +import link.LinkUrl; + +import java.util.Optional; + +public interface TagMatcher { + + Optional matches(LinkUrl linkUrl); +} diff --git a/3-Domain/src/main/java/tag/TagName.java b/3-Domain/src/main/java/tag/TagName.java new file mode 100644 index 0000000..edcc0ab --- /dev/null +++ b/3-Domain/src/main/java/tag/TagName.java @@ -0,0 +1,5 @@ +package tag; + +public record TagName(String name) { + +} diff --git a/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java b/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java new file mode 100644 index 0000000..322dccb --- /dev/null +++ b/3-Domain/src/main/java/tag/matcherImplementations/CustomTagMatcher.java @@ -0,0 +1,32 @@ +package tag.matcherImplementations; + +import link.LinkUrl; +import tag.Tag; +import tag.TagMatcher; +import tag.TagName; + +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CustomTagMatcher implements TagMatcher { + + private final Pattern regex; + private final TagName tagName; + + public CustomTagMatcher(TagName name, String regexString) { + this.regex = Pattern.compile(regexString); // TODO this could throw?? + this.tagName = name; + } + + @Override + public Optional matches(LinkUrl linkUrl) { + Matcher matcher = regex.matcher(linkUrl.toString()); + + if (matcher.find()) { + return Optional.of(new Tag(this.tagName, "")); + } + return Optional.empty(); + } + +} diff --git a/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java b/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java new file mode 100644 index 0000000..b87ebec --- /dev/null +++ b/3-Domain/src/main/java/tag/matcherImplementations/GitHubTagMatcher.java @@ -0,0 +1,27 @@ +package tag.matcherImplementations; + +import link.LinkUrl; +import tag.Tag; +import tag.TagMatcher; +import tag.TagName; + +import java.util.Optional; + +public class GitHubTagMatcher implements TagMatcher { + + public TagName getName() { + return new TagName("github"); + } + + public String getAdditionInfo() { + return null; + } + + @Override + public Optional matches(LinkUrl linkUrl) { + if (linkUrl.getUrl().getHost().equals("github.com")) { + return Optional.of(new Tag(getName(), getAdditionInfo())); + } + return Optional.empty(); + } +}