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/documents | |
| parent | 0dc3a12affc2e46c1a0df2899cf51a1ae3fdbd61 (diff) | |
Create internal package
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/internal/documents')
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 +} |
