aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/internal/documents
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-24 08:16:16 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-24 08:16:16 +0000
commit3e2786a004eddf968a5fa7d5a92dff5b1b5f7734 (patch)
tree7fa1bcc1e484cd0ef782f64baf504ee83333d397 /src/main/java/org/zwobble/mammoth/internal/documents
parent0dc3a12affc2e46c1a0df2899cf51a1ae3fdbd61 (diff)
Create internal package
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/documents')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Bookmark.java18
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Document.java21
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/DocumentElement.java5
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java20
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Documents.java4
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java7
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java42
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Image.java37
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java13
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Note.java27
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/NoteReference.java32
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/NoteType.java6
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Notes.java27
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/NumberingLevel.java27
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java33
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Run.java65
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Style.java26
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Tab.java13
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Table.java21
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/TableCell.java21
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/TableRow.java21
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/Text.java18
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/documents/VerticalAlignment.java7
23 files changed, 511 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Bookmark.java b/src/main/java/org/zwobble/mammoth/internal/documents/Bookmark.java
new file mode 100644
index 0000000..cca6317
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Bookmark.java
@@ -0,0 +1,18 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class Bookmark implements DocumentElement {
+ private final String name;
+
+ public Bookmark(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Document.java b/src/main/java/org/zwobble/mammoth/internal/documents/Document.java
new file mode 100644
index 0000000..447d6ed
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Document.java
@@ -0,0 +1,21 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class Document implements HasChildren {
+ private final List<DocumentElement> children;
+ private final Notes notes;
+
+ public Document(List<DocumentElement> children, Notes notes) {
+ this.children = children;
+ this.notes = notes;
+ }
+
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ public Notes getNotes() {
+ return notes;
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElement.java b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElement.java
new file mode 100644
index 0000000..b3360ed
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElement.java
@@ -0,0 +1,5 @@
+package org.zwobble.mammoth.internal.documents;
+
+public interface DocumentElement {
+ <T> T accept(DocumentElementVisitor<T> visitor);
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java
new file mode 100644
index 0000000..569a525
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/DocumentElementVisitor.java
@@ -0,0 +1,20 @@
+package org.zwobble.mammoth.internal.documents;
+
+public interface DocumentElementVisitor<T> {
+ T visit(Paragraph paragraph);
+ T visit(Run run);
+ T visit(Text text);
+
+ T visit(Tab tab);
+ T visit(LineBreak lineBreak);
+
+ T visit(Table table);
+ T visit(TableRow tableRow);
+ T visit(TableCell tableCell);
+
+ T visit(Hyperlink hyperlink);
+ T visit(Bookmark bookmark);
+ T visit(NoteReference noteReference);
+
+ T visit(Image image);
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Documents.java b/src/main/java/org/zwobble/mammoth/internal/documents/Documents.java
new file mode 100644
index 0000000..64a5d1c
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Documents.java
@@ -0,0 +1,4 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class Documents {
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java b/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java
new file mode 100644
index 0000000..2a5280e
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/HasChildren.java
@@ -0,0 +1,7 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public interface HasChildren {
+ List<DocumentElement> getChildren();
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java
new file mode 100644
index 0000000..ceb558f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Hyperlink.java
@@ -0,0 +1,42 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+import java.util.Optional;
+
+public class Hyperlink implements DocumentElement, HasChildren {
+ public static Hyperlink href(String href, List<DocumentElement> children) {
+ return new Hyperlink(Optional.of(href), Optional.empty(), children);
+ }
+
+ public static Hyperlink anchor(String anchor, List<DocumentElement> children) {
+ return new Hyperlink(Optional.empty(), Optional.of(anchor), children);
+ }
+
+ private final Optional<String> href;
+ private final Optional<String> anchor;
+ private final List<DocumentElement> children;
+
+ private Hyperlink(Optional<String> href, Optional<String> anchor, List<DocumentElement> children) {
+ this.href = href;
+ this.anchor = anchor;
+ this.children = children;
+ }
+
+ public Optional<String> getHref() {
+ return href;
+ }
+
+ public Optional<String> getAnchor() {
+ return anchor;
+ }
+
+ @Override
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Image.java b/src/main/java/org/zwobble/mammoth/internal/documents/Image.java
new file mode 100644
index 0000000..8ceee7c
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Image.java
@@ -0,0 +1,37 @@
+package org.zwobble.mammoth.internal.documents;
+
+import org.zwobble.mammoth.internal.util.InputStreamSupplier;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Optional;
+
+public class Image implements DocumentElement {
+
+ private final Optional<String> altText;
+ private final Optional<String> contentType;
+ private final InputStreamSupplier open;
+
+ public Image(Optional<String> altText, Optional<String> contentType, InputStreamSupplier open) {
+ this.altText = altText;
+ this.contentType = contentType;
+ this.open = open;
+ }
+
+ public Optional<String> getAltText() {
+ return altText;
+ }
+
+ public Optional<String> getContentType() {
+ return contentType;
+ }
+
+ public InputStream open() throws IOException {
+ return open.open();
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java b/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java
new file mode 100644
index 0000000..00b2a06
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/LineBreak.java
@@ -0,0 +1,13 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class LineBreak implements DocumentElement {
+ public static final LineBreak LINE_BREAK = new LineBreak();
+
+ private LineBreak() {
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Note.java b/src/main/java/org/zwobble/mammoth/internal/documents/Note.java
new file mode 100644
index 0000000..d7d741b
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Note.java
@@ -0,0 +1,27 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class Note {
+ private final NoteType noteType;
+ private final String id;
+ private final List<DocumentElement> body;
+
+ public Note(NoteType noteType, String id, List<DocumentElement> body) {
+ this.noteType = noteType;
+ this.id = id;
+ this.body = body;
+ }
+
+ public NoteType getNoteType() {
+ return noteType;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public List<DocumentElement> getBody() {
+ return body;
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/NoteReference.java b/src/main/java/org/zwobble/mammoth/internal/documents/NoteReference.java
new file mode 100644
index 0000000..7d0beb2
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/NoteReference.java
@@ -0,0 +1,32 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class NoteReference implements DocumentElement {
+ public static NoteReference footnoteReference(String noteId) {
+ return new NoteReference(NoteType.FOOTNOTE, noteId);
+ }
+
+ public static NoteReference endnoteReference(String noteId) {
+ return new NoteReference(NoteType.ENDNOTE, noteId);
+ }
+
+ private final NoteType noteType;
+ private final String noteId;
+
+ public NoteReference(NoteType noteType, String noteId) {
+ this.noteType = noteType;
+ this.noteId = noteId;
+ }
+
+ public NoteType getNoteType() {
+ return noteType;
+ }
+
+ public String getNoteId() {
+ return noteId;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/NoteType.java b/src/main/java/org/zwobble/mammoth/internal/documents/NoteType.java
new file mode 100644
index 0000000..47defc1
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/NoteType.java
@@ -0,0 +1,6 @@
+package org.zwobble.mammoth.internal.documents;
+
+public enum NoteType {
+ FOOTNOTE,
+ ENDNOTE
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Notes.java b/src/main/java/org/zwobble/mammoth/internal/documents/Notes.java
new file mode 100644
index 0000000..d8ca28d
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Notes.java
@@ -0,0 +1,27 @@
+package org.zwobble.mammoth.internal.documents;
+
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimaps;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import static org.zwobble.mammoth.internal.util.MammothLists.list;
+
+public class Notes {
+ public final static Notes EMPTY = new Notes(list());
+
+ private final Map<NoteType, Map<String, Note>> notes;
+
+ public Notes(List<Note> notes) {
+ this.notes = Maps.transformValues(
+ Multimaps.index(notes, Note::getNoteType).asMap(),
+ notesOfType -> Maps.uniqueIndex(notesOfType, Note::getId));
+ }
+
+ public Optional<Note> findNote(NoteType noteType, String noteId) {
+ return Optional.ofNullable(notes.get(noteType))
+ .flatMap(notesOfType -> Optional.ofNullable(notesOfType.get(noteId)));
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/NumberingLevel.java b/src/main/java/org/zwobble/mammoth/internal/documents/NumberingLevel.java
new file mode 100644
index 0000000..592d96f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/NumberingLevel.java
@@ -0,0 +1,27 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class NumberingLevel {
+ public static NumberingLevel ordered(String levelIndex) {
+ return new NumberingLevel(levelIndex, true);
+ }
+
+ public static NumberingLevel unordered(String levelIndex) {
+ return new NumberingLevel(levelIndex, false);
+ }
+
+ private final String levelIndex;
+ private final boolean isOrdered;
+
+ public NumberingLevel(String levelIndex, boolean isOrdered) {
+ this.levelIndex = levelIndex;
+ this.isOrdered = isOrdered;
+ }
+
+ public String getLevelIndex() {
+ return levelIndex;
+ }
+
+ public boolean isOrdered() {
+ return isOrdered;
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java
new file mode 100644
index 0000000..66ea009
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Paragraph.java
@@ -0,0 +1,33 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+import java.util.Optional;
+
+public class Paragraph implements DocumentElement, HasChildren {
+ private final Optional<Style> style;
+ private final Optional<NumberingLevel> numbering;
+ private final List<DocumentElement> children;
+
+ public Paragraph(Optional<Style> style, Optional<NumberingLevel> numbering, List<DocumentElement> children) {
+ this.style = style;
+ this.numbering = numbering;
+ this.children = children;
+ }
+
+ public Optional<Style> getStyle() {
+ return style;
+ }
+
+ public Optional<NumberingLevel> getNumbering() {
+ return numbering;
+ }
+
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Run.java b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java
new file mode 100644
index 0000000..61f865f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Run.java
@@ -0,0 +1,65 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+import java.util.Optional;
+
+public class Run implements DocumentElement, HasChildren {
+ private final boolean isBold;
+ private final boolean isItalic;
+ private final boolean isUnderline;
+ private final boolean isStrikethrough;
+ private final VerticalAlignment verticalAlignment;
+ private final Optional<Style> style;
+ private final List<DocumentElement> children;
+
+ public Run(
+ boolean isBold,
+ boolean isItalic,
+ boolean isUnderline,
+ boolean isStrikethrough,
+ VerticalAlignment verticalAlignment,
+ Optional<Style> style,
+ List<DocumentElement> children)
+ {
+ this.isBold = isBold;
+ this.isItalic = isItalic;
+ this.isUnderline = isUnderline;
+ this.isStrikethrough = isStrikethrough;
+ this.verticalAlignment = verticalAlignment;
+ this.style = style;
+ this.children = children;
+ }
+
+ public boolean isBold() {
+ return isBold;
+ }
+
+ public boolean isItalic() {
+ return isItalic;
+ }
+
+ public boolean isUnderline() {
+ return isUnderline;
+ }
+
+ public boolean isStrikethrough() {
+ return isStrikethrough;
+ }
+
+ public VerticalAlignment getVerticalAlignment() {
+ return verticalAlignment;
+ }
+
+ public Optional<Style> getStyle() {
+ return style;
+ }
+
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Style.java b/src/main/java/org/zwobble/mammoth/internal/documents/Style.java
new file mode 100644
index 0000000..2d7805c
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Style.java
@@ -0,0 +1,26 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.Optional;
+
+public class Style {
+ private final String styleId;
+ private final Optional<String> name;
+
+ public Style(String styleId, Optional<String> name) {
+ this.styleId = styleId;
+ this.name = name;
+ }
+
+ public String getStyleId() {
+ return styleId;
+ }
+
+ public Optional<String> getName() {
+ return name;
+ }
+
+ public String describe() {
+ String styleIdDescription = "Style ID: " + styleId;
+ return this.name.map(name -> name + " (" + styleIdDescription + ")").orElse(styleIdDescription);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Tab.java b/src/main/java/org/zwobble/mammoth/internal/documents/Tab.java
new file mode 100644
index 0000000..b977d12
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Tab.java
@@ -0,0 +1,13 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class Tab implements DocumentElement {
+ public static final Tab TAB = new Tab();
+
+ private Tab() {
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Table.java b/src/main/java/org/zwobble/mammoth/internal/documents/Table.java
new file mode 100644
index 0000000..7381c7d
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Table.java
@@ -0,0 +1,21 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class Table implements DocumentElement, HasChildren {
+ private final List<DocumentElement> children;
+
+ public Table(List<DocumentElement> children) {
+ this.children = children;
+ }
+
+ @Override
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/TableCell.java b/src/main/java/org/zwobble/mammoth/internal/documents/TableCell.java
new file mode 100644
index 0000000..f0ce7be
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/TableCell.java
@@ -0,0 +1,21 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class TableCell implements DocumentElement, HasChildren {
+ private final List<DocumentElement> children;
+
+ public TableCell(List<DocumentElement> children) {
+ this.children = children;
+ }
+
+ @Override
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/TableRow.java b/src/main/java/org/zwobble/mammoth/internal/documents/TableRow.java
new file mode 100644
index 0000000..9450c88
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/TableRow.java
@@ -0,0 +1,21 @@
+package org.zwobble.mammoth.internal.documents;
+
+import java.util.List;
+
+public class TableRow implements DocumentElement, HasChildren {
+ private final List<DocumentElement> children;
+
+ public TableRow(List<DocumentElement> children) {
+ this.children = children;
+ }
+
+ @Override
+ public List<DocumentElement> getChildren() {
+ return children;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/Text.java b/src/main/java/org/zwobble/mammoth/internal/documents/Text.java
new file mode 100644
index 0000000..64123e9
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/Text.java
@@ -0,0 +1,18 @@
+package org.zwobble.mammoth.internal.documents;
+
+public class Text implements DocumentElement {
+ private final String value;
+
+ public Text(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public <T> T accept(DocumentElementVisitor<T> visitor) {
+ return visitor.visit(this);
+ }
+}
diff --git a/src/main/java/org/zwobble/mammoth/internal/documents/VerticalAlignment.java b/src/main/java/org/zwobble/mammoth/internal/documents/VerticalAlignment.java
new file mode 100644
index 0000000..5957e8f
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/internal/documents/VerticalAlignment.java
@@ -0,0 +1,7 @@
+package org.zwobble.mammoth.internal.documents;
+
+public enum VerticalAlignment {
+ SUPERSCRIPT,
+ SUBSCRIPT,
+ BASELINE
+}