Add OptionalTag

This commit is contained in:
qvalentin 2022-04-01 17:05:25 +02:00
parent d091772002
commit 325adfb0f2
Signed by: qvalentin
GPG Key ID: C979FA1EAFCABF1C
8 changed files with 81 additions and 16 deletions

View File

@ -4,11 +4,8 @@ import tag.TagName;
public class Main { public class Main {
public static void main(String[] args) {
public static void main(String[]args){
TagName test = new TagName("ds"); TagName test = new TagName("ds");
System.out.println(test); System.out.println(test);
} }
} }

View File

@ -0,0 +1,23 @@
package tag;
import java.util.Collection;
import java.util.Optional;
public record OptionalTag(Optional<Tag> tag) {
public Optional<Tag> 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<Tag> collection) {
if (tag.isPresent()) collection.add(tag.get());
}
}

View File

@ -1,5 +1,22 @@
package tag; package tag;
public record Tag(TagName name, String additionalData) { import java.util.Optional;
public class Tag {
private TagName name;
private Optional<String> additionalData;
public Tag(TagName name) {
this.name = name;
}
public Tag(TagName name, Optional<String> additionalData) {
this.name = name;
this.additionalData = additionalData;
}
public Tag addAdditionalData(String additionalData) {
return new Tag(this.name, Optional.of(additionalData));
}
} }

View File

@ -2,9 +2,11 @@ package tag;
import link.LinkUrl; import link.LinkUrl;
import java.util.Collection;
import java.util.Optional; import java.util.Optional;
public interface TagMatcher { public interface TagMatcher {
Optional<Tag> matches(LinkUrl linkUrl); OptionalTag ifMatches(LinkUrl linkUrl);
} }

View File

@ -0,0 +1,18 @@
package tag;
import java.util.HashSet;
import java.util.Set;
public class TagMatcherRepository {
Set<TagMatcher> tagMatchers = Set.of();
public TagMatcherRepository(final TagPersistenceAdapter tagPersistenceAdapter, final Set<TagMatcher> staticTagMatchers) {
tagMatchers.addAll(staticTagMatchers);
tagMatchers.addAll(tagPersistenceAdapter.getCustomTagMatchers());
}
public Set<TagMatcher> getTagMatchers() {
return new HashSet<>(tagMatchers);
}
}

View File

@ -0,0 +1,9 @@
package tag;
import java.util.Set;
public interface TagPersistenceAdapter {
Set<TagMatcher> getCustomTagMatchers();
}

View File

@ -1,11 +1,11 @@
package tag.matcherImplementations; package tag.matcherImplementations;
import link.LinkUrl; import link.LinkUrl;
import tag.OptionalTag;
import tag.Tag; import tag.Tag;
import tag.TagMatcher; import tag.TagMatcher;
import tag.TagName; import tag.TagName;
import java.util.Optional;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -20,13 +20,13 @@ public class CustomTagMatcher implements TagMatcher {
} }
@Override @Override
public Optional<Tag> matches(LinkUrl linkUrl) { public OptionalTag ifMatches(LinkUrl linkUrl) {
Matcher matcher = regex.matcher(linkUrl.toString()); Matcher matcher = regex.matcher(linkUrl.toString());
if (matcher.find()) { if (matcher.find()) {
return Optional.of(new Tag(this.tagName, "")); return OptionalTag.of(new Tag(this.tagName));
} }
return Optional.empty(); return OptionalTag.empty();
} }
} }

View File

@ -1,12 +1,11 @@
package tag.matcherImplementations; package tag.matcherImplementations;
import link.LinkUrl; import link.LinkUrl;
import tag.OptionalTag;
import tag.Tag; import tag.Tag;
import tag.TagMatcher; import tag.TagMatcher;
import tag.TagName; import tag.TagName;
import java.util.Optional;
public class GitHubTagMatcher implements TagMatcher { public class GitHubTagMatcher implements TagMatcher {
public TagName getName() { public TagName getName() {
@ -14,14 +13,14 @@ public class GitHubTagMatcher implements TagMatcher {
} }
public String getAdditionInfo() { public String getAdditionInfo() {
return null; return "";//TODO
} }
@Override @Override
public Optional<Tag> matches(LinkUrl linkUrl) { public OptionalTag ifMatches(LinkUrl linkUrl) {
if (linkUrl.getUrl().getHost().equals("github.com")) { 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();
} }
} }