diff options
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java new file mode 100644 index 0000000..715ac94 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java @@ -0,0 +1,42 @@ +package org.zwobble.mammoth.styles; + +import org.zwobble.mammoth.documents.Paragraph; +import org.zwobble.mammoth.documents.Style; + +import java.util.Optional; + +public class ParagraphMatcher { + public static ParagraphMatcher styleId(String styleId) { + return new ParagraphMatcher(Optional.of(styleId), Optional.empty()); + } + + public static ParagraphMatcher styleName(String styleName) { + return new ParagraphMatcher(Optional.empty(), Optional.of(styleName)); + } + + private final Optional<String> styleId; + private final Optional<String> styleName; + + public ParagraphMatcher(Optional<String> styleId, Optional<String> styleName) { + this.styleId = styleId; + this.styleName = styleName; + } + + public boolean matches(Paragraph paragraph) { + return matchesStyleId(paragraph) && matchesStyleName(paragraph); + } + + private boolean matchesStyleId(Paragraph paragraph) { + return matches(styleId, paragraph.getStyle().map(Style::getStyleId)); + } + + private boolean matchesStyleName(Paragraph paragraph) { + return matches(styleName, paragraph.getStyle().flatMap(Style::getName)); + } + + private boolean matches(Optional<String> required, Optional<String> actual) { + return required + .map(requiredValue -> actual.map(requiredValue::equals).orElse(false)) + .orElse(true); + } +} |
