aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-24 21:03:42 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-24 21:03:42 +0000
commit86207d30715fe000b95b2f8e8b55b59a21aba34b (patch)
treecb61c8c131c6201a23995706d1124d79812e1d5f /src/main/java/org/zwobble/mammoth/internal
parentd4ac19bac1d0e1315d129c39de56121def95007b (diff)
Turn Result into a minimal interface
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/DocumentToHtml.java14
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java20
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java12
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/NotesXmlReader.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java10
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java69
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/results/Warning.java16
8 files changed, 119 insertions, 34 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/DocumentToHtml.java b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtml.java
index b501800..6c4961a 100644
--- a/src/main/java/org/zwobble/mammoth/internal/DocumentToHtml.java
+++ b/src/main/java/org/zwobble/mammoth/internal/DocumentToHtml.java
@@ -7,8 +7,8 @@ import com.google.common.io.ByteStreams;
import org.zwobble.mammoth.internal.documents.*;
import org.zwobble.mammoth.internal.html.Html;
import org.zwobble.mammoth.internal.html.HtmlNode;
-import org.zwobble.mammoth.results.Result;
-import org.zwobble.mammoth.results.Warning;
+import org.zwobble.mammoth.internal.results.InternalResult;
+import org.zwobble.mammoth.internal.results.Warning;
import org.zwobble.mammoth.internal.styles.HtmlPath;
import org.zwobble.mammoth.internal.styles.StyleMap;
import org.zwobble.mammoth.internal.util.MammothLists;
@@ -19,14 +19,14 @@ import java.util.Base64;
import java.util.List;
import java.util.Map;
-import static org.zwobble.mammoth.results.Warning.warning;
+import static org.zwobble.mammoth.internal.results.Warning.warning;
import static org.zwobble.mammoth.internal.util.MammothLists.*;
import static org.zwobble.mammoth.internal.util.MammothMaps.map;
public class DocumentToHtml {
- public static Result<List<HtmlNode>> convertToHtml(Document document, DocumentToHtmlOptions options) {
+ public static InternalResult<List<HtmlNode>> convertToHtml(Document document, DocumentToHtmlOptions options) {
DocumentToHtml documentConverter = new DocumentToHtml(options);
- return new Result<>(
+ return new InternalResult<>(
documentConverter.convertToHtml(document),
documentConverter.warnings.build());
}
@@ -38,9 +38,9 @@ public class DocumentToHtml {
reference -> document.getNotes().findNote(reference.getNoteType(), reference.getNoteId()).get()));
}
- public static Result<List<HtmlNode>> convertToHtml(DocumentElement element, DocumentToHtmlOptions options) {
+ public static InternalResult<List<HtmlNode>> convertToHtml(DocumentElement element, DocumentToHtmlOptions options) {
DocumentToHtml documentConverter = new DocumentToHtml(options);
- return new Result<>(
+ return new InternalResult<>(
documentConverter.convertToHtml(element),
documentConverter.warnings.build());
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
index 43a275a..c8aa57e 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/BodyXmlReader.java
@@ -2,8 +2,8 @@ package org.zwobble.mammoth.internal.docx;
import com.google.common.collect.ImmutableSet;
import org.zwobble.mammoth.internal.documents.*;
-import org.zwobble.mammoth.results.Result;
-import org.zwobble.mammoth.results.Warning;
+import org.zwobble.mammoth.internal.results.InternalResult;
+import org.zwobble.mammoth.internal.results.Warning;
import org.zwobble.mammoth.internal.util.InputStreamSupplier;
import org.zwobble.mammoth.internal.util.MammothOptionals;
import org.zwobble.mammoth.internal.xml.XmlElement;
@@ -19,7 +19,7 @@ import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
import static org.zwobble.mammoth.internal.docx.ReadResult.EMPTY_SUCCESS;
import static org.zwobble.mammoth.internal.docx.ReadResult.success;
-import static org.zwobble.mammoth.results.Warning.warning;
+import static org.zwobble.mammoth.internal.results.Warning.warning;
import static org.zwobble.mammoth.internal.util.MammothLists.list;
import static org.zwobble.mammoth.internal.util.MammothStrings.trimLeft;
@@ -169,7 +169,7 @@ public class BodyXmlReader {
}
}
- private Result<Optional<Style>> readRunStyle(XmlElementLike properties) {
+ private InternalResult<Optional<Style>> readRunStyle(XmlElementLike properties) {
return readStyle(properties, "w:rStyle", "Run", styles::findCharacterStyleById);
}
@@ -189,11 +189,11 @@ public class BodyXmlReader {
(style, children) -> new Paragraph(style, numbering, children)).appendExtra();
}
- private Result<Optional<Style>> readParagraphStyle(XmlElementLike properties) {
+ private InternalResult<Optional<Style>> readParagraphStyle(XmlElementLike properties) {
return readStyle(properties, "w:pStyle", "Paragraph", styles::findParagraphStyleById);
}
- private Result<Optional<Style>> readStyle(
+ private InternalResult<Optional<Style>> readStyle(
XmlElementLike properties,
String styleTagName,
String styleType,
@@ -201,19 +201,19 @@ public class BodyXmlReader {
{
return readVal(properties, styleTagName)
.map(styleId -> findStyleById(styleType, styleId, findStyleById))
- .orElse(Result.empty());
+ .orElse(InternalResult.empty());
}
- private Result<Optional<Style>> findStyleById(
+ private InternalResult<Optional<Style>> findStyleById(
String styleType,
String styleId,
Function<String, Optional<Style>> findStyleById)
{
Optional<Style> style = findStyleById.apply(styleId);
if (style.isPresent()) {
- return Result.success(style);
+ return InternalResult.success(style);
} else {
- return new Result<>(
+ return new InternalResult<>(
Optional.of(new Style(styleId, Optional.empty())),
list(warning(styleType + " style with ID " + styleId + " was referenced but not defined in the document")));
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java
index 4341bbf..86a0d1a 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentReader.java
@@ -2,7 +2,7 @@ package org.zwobble.mammoth.internal.docx;
import org.zwobble.mammoth.internal.documents.Document;
import org.zwobble.mammoth.internal.documents.Notes;
-import org.zwobble.mammoth.results.Result;
+import org.zwobble.mammoth.internal.results.InternalResult;
import org.zwobble.mammoth.internal.util.MammothLists;
import org.zwobble.mammoth.internal.xml.XmlElement;
@@ -21,7 +21,7 @@ public class DocumentReader {
BodyXmlReader forName(String name);
}
- public static Result<Document> readDocument(Optional<Path> path, DocxFile zipFile) {
+ public static InternalResult<Document> readDocument(Optional<Path> path, DocxFile zipFile) {
Styles styles = readStyles(zipFile);
Numbering numbering = readNumbering(zipFile);
ContentTypes contentTypes = readContentTypes(zipFile);
@@ -63,14 +63,14 @@ public class DocumentReader {
}
}
- private static Result<Notes> readNotes(DocxFile file, BodyReaders bodyReaders) {
- return Result.map(
+ private static InternalResult<Notes> readNotes(DocxFile file, BodyReaders bodyReaders) {
+ return InternalResult.map(
tryParseOfficeXml(file, "word/footnotes.xml")
.map(NotesXmlReader.footnote(bodyReaders.forName("footnotes"))::readElement)
- .orElse(Result.success(list())),
+ .orElse(InternalResult.success(list())),
tryParseOfficeXml(file, "word/endnotes.xml")
.map(NotesXmlReader.endnote(bodyReaders.forName("endnotes"))::readElement)
- .orElse(Result.success(list())),
+ .orElse(InternalResult.success(list())),
MammothLists::concat).map(Notes::new);
}
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java
index 3c215fe..be4f474 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/DocumentXmlReader.java
@@ -2,7 +2,7 @@ package org.zwobble.mammoth.internal.docx;
import org.zwobble.mammoth.internal.documents.Document;
import org.zwobble.mammoth.internal.documents.Notes;
-import org.zwobble.mammoth.results.Result;
+import org.zwobble.mammoth.internal.results.InternalResult;
import org.zwobble.mammoth.internal.xml.XmlElement;
public class DocumentXmlReader {
@@ -14,7 +14,7 @@ public class DocumentXmlReader {
this.notes = notes;
}
- public Result<Document> readElement(XmlElement element) {
+ public InternalResult<Document> readElement(XmlElement element) {
XmlElement body = element.findChild("w:body");
return bodyReader.readElements(body.children())
.toResult()
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/NotesXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/NotesXmlReader.java
index 2e31aa2..d2ba221 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/NotesXmlReader.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/NotesXmlReader.java
@@ -1,7 +1,7 @@
package org.zwobble.mammoth.internal.docx;
import org.zwobble.mammoth.internal.documents.NoteType;
-import org.zwobble.mammoth.results.Result;
+import org.zwobble.mammoth.internal.results.InternalResult;
import org.zwobble.mammoth.internal.documents.Note;
import org.zwobble.mammoth.internal.xml.XmlElement;
@@ -29,9 +29,9 @@ public class NotesXmlReader {
this.noteType = noteType;
}
- public Result<List<Note>> readElement(XmlElement element) {
+ public InternalResult<List<Note>> readElement(XmlElement element) {
Iterable<XmlElement> elements = filter(element.findChildren("w:" + tagName), this::isNoteElement);
- return Result.concat(transform(elements, this::readNoteElement));
+ return InternalResult.concat(transform(elements, this::readNoteElement));
}
private boolean isNoteElement(XmlElement element) {
@@ -44,7 +44,7 @@ public class NotesXmlReader {
return type.equals("continuationSeparator") || type.equals("separator");
}
- private Result<Note> readNoteElement(XmlElement element) {
+ private InternalResult<Note> readNoteElement(XmlElement element) {
return bodyReader.readElements(element.children())
.toResult()
.map(children -> new Note(
diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java
index 366fd12..b9e4ec9 100644
--- a/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java
+++ b/src/main/java/org/zwobble/mammoth/internal/docx/ReadResult.java
@@ -2,8 +2,8 @@ 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 org.zwobble.mammoth.internal.results.InternalResult;
+import org.zwobble.mammoth.internal.results.Warning;
import java.util.List;
import java.util.function.BiFunction;
@@ -27,7 +27,7 @@ public class ReadResult {
}
public static <T> ReadResult map(
- Result<T> first,
+ InternalResult<T> first,
ReadResult second,
BiFunction<T, List<DocumentElement>, DocumentElement> function)
{
@@ -78,8 +78,8 @@ public class ReadResult {
return new ReadResult(concat(elements, extra), list(), warnings);
}
- public Result<List<DocumentElement>> toResult() {
- return new Result<>(elements, warnings);
+ public InternalResult<List<DocumentElement>> toResult() {
+ return new InternalResult<>(elements, warnings);
}
private static <T> List<T> concat(List<T> first, List<T> second) {
diff --git a/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
new file mode 100644
index 0000000..b3c9ec7
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/results/InternalResult.java
@@ -0,0 +1,69 @@
+package org.zwobble.mammoth.internal.results;
+
+import com.google.common.collect.ImmutableList;
+import org.zwobble.mammoth.internal.documents.Style;
+import org.zwobble.mammoth.internal.util.MammothLists;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiFunction;
+import java.util.function.Function;
+
+import static org.zwobble.mammoth.internal.util.MammothLists.list;
+
+public class InternalResult<T> implements org.zwobble.mammoth.Result<T> {
+ public static <T> InternalResult<List<T>> concat(Iterable<InternalResult<T>> results) {
+ ImmutableList.Builder<T> elements = ImmutableList.builder();
+ ImmutableList.Builder<Warning> warnings = ImmutableList.builder();
+ for (InternalResult<T> result : results) {
+ elements.add(result.value);
+ warnings.addAll(result.warnings);
+ }
+ return new InternalResult<>(elements.build(), warnings.build());
+ }
+
+ public static <T1, T2, R> InternalResult<R> map(
+ InternalResult<T1> first,
+ InternalResult<T2> second,
+ BiFunction<T1, T2, R> function)
+ {
+ return new InternalResult<>(
+ function.apply(first.value, second.value),
+ MammothLists.concat(first.warnings, second.warnings));
+ }
+
+ public static InternalResult<Optional<Style>> empty() {
+ return new InternalResult<>(Optional.empty(), list());
+ }
+
+ public static <T> InternalResult<T> success(T value) {
+ return new InternalResult<>(value, list());
+ }
+
+ private final T value;
+ private final List<Warning> warnings;
+
+ public InternalResult(T value, List<Warning> warnings) {
+ this.value = value;
+ this.warnings = warnings;
+ }
+
+ public T getValue() {
+ return value;
+ }
+
+ public List<Warning> getWarnings() {
+ return warnings;
+ }
+
+ public <R> InternalResult<R> map(Function<T, R> function) {
+ return new InternalResult<>(function.apply(value), warnings);
+ }
+
+ public <R> InternalResult<R> flatMap(Function<T, InternalResult<R>> function) {
+ InternalResult<R> intermediateResult = function.apply(value);
+ return new InternalResult<>(
+ intermediateResult.value,
+ MammothLists.concat(warnings, intermediateResult.warnings));
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/results/Warning.java b/src/main/java/org/zwobble/mammoth/internal/results/Warning.java
new file mode 100644
index 0000000..062860f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/results/Warning.java
@@ -0,0 +1,16 @@
+package org.zwobble.mammoth.internal.results;
+
+public class Warning {
+ public static Warning warning(String message) {
+ return new Warning(message);
+ }
+ private final String message;
+
+ private Warning(String message) {
+ this.message = message;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+}