From a506a6d3679c282cfd3a2f0257f5859d420feb22 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 20 Feb 2016 15:02:54 +0000 Subject: Allow paragraph matchers by style name --- .../zwobble/mammoth/styles/ParagraphMatcher.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java (limited to 'src/main/java/org/zwobble/mammoth/styles/ParagraphMatcher.java') 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 styleId; + private final Optional styleName; + + public ParagraphMatcher(Optional styleId, Optional 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 required, Optional actual) { + return required + .map(requiredValue -> actual.map(requiredValue::equals).orElse(false)) + .orElse(true); + } +} -- cgit v1.2.3