diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-24 08:16:16 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-24 08:16:16 +0000 |
| commit | 3e2786a004eddf968a5fa7d5a92dff5b1b5f7734 (patch) | |
| tree | 7fa1bcc1e484cd0ef782f64baf504ee83333d397 /src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java | |
| parent | 0dc3a12affc2e46c1a0df2899cf51a1ae3fdbd61 (diff) | |
Create internal package
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java')
| -rw-r--r-- | src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java new file mode 100644 index 0000000..366fd12 --- /dev/null +++ b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java @@ -0,0 +1,91 @@ +package org.zwobble.mammoth.internal.docx; + +import com.google.common.collect.ImmutableList; +import org.zwobble.mammoth.internal.documents.DocumentElement; +import org.zwobble.mammoth.results.Result; +import org.zwobble.mammoth.results.Warning; + +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Function; + +import static org.zwobble.mammoth.internal.util.MammothLists.list; + +public class ReadResult { + public static final ReadResult EMPTY_SUCCESS = success(list()); + + public static ReadResult concat(Iterable<ReadResult> results) { + ImmutableList.Builder<DocumentElement> elements = ImmutableList.builder(); + ImmutableList.Builder<DocumentElement> extra = ImmutableList.builder(); + ImmutableList.Builder<Warning> warnings = ImmutableList.builder(); + for (ReadResult result : results) { + elements.addAll(result.elements); + extra.addAll(result.extra); + warnings.addAll(result.warnings); + } + return new ReadResult(elements.build(), extra.build(), warnings.build()); + } + + public static <T> ReadResult map( + Result<T> first, + ReadResult second, + BiFunction<T, List<DocumentElement>, DocumentElement> function) + { + return new ReadResult( + list(function.apply(first.getValue(), second.elements)), + second.extra, + concat(first.getWarnings(), second.warnings)); + } + + public static ReadResult success(DocumentElement element) { + return success(list(element)); + } + + public static ReadResult success(List<DocumentElement> elements) { + return new ReadResult(elements, list(), list()); + } + + public static ReadResult emptyWithWarning(Warning warning) { + return new ReadResult(list(), list(), list(warning)); + } + + public static ReadResult withWarning(DocumentElement element, Warning warning) { + return new ReadResult(list(element), list(), list(warning)); + } + + private final List<DocumentElement> elements; + private final List<DocumentElement> extra; + private final List<Warning> warnings; + + public ReadResult(List<DocumentElement> elements, List<DocumentElement> extra, List<Warning> warnings) { + this.elements = elements; + this.extra = extra; + this.warnings = warnings; + } + + public ReadResult map(Function<List<DocumentElement>, DocumentElement> function) { + return new ReadResult( + list(function.apply(elements)), + extra, + warnings); + } + + public ReadResult toExtra() { + return new ReadResult(list(), concat(extra, elements), warnings); + } + + public ReadResult appendExtra() { + return new ReadResult(concat(elements, extra), list(), warnings); + } + + public Result<List<DocumentElement>> toResult() { + return new Result<>(elements, warnings); + } + + private static <T> List<T> concat(List<T> first, List<T> second) { + ImmutableList.Builder<T> builder = ImmutableList.builder(); + builder.addAll(first); + builder.addAll(second); + return builder.build(); + } +} |
