diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-20 15:02:54 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-20 15:02:54 +0000 |
| commit | a506a6d3679c282cfd3a2f0257f5859d420feb22 (patch) | |
| tree | fea7aa22d6012abb8a14bc5da1abf8c7c9a7b692 /src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java | |
| parent | 969f585f87b4da456a30c99e3e988152fdca96fe (diff) | |
Allow paragraph matchers by style name
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); + } +} |
