From c3c2151b4b0fc9b3226a5ec66e0f7952290f3d97 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 23 Jan 2018 20:51:30 +0000 Subject: Pass list of Relationship instances into Relationships --- .../mammoth/internal/docx/Relationship.java | 8 +++++++- .../mammoth/internal/docx/Relationships.java | 22 +++++++++++++--------- .../mammoth/internal/docx/RelationshipsXml.java | 15 +++++++++------ .../internal/docx/StatefulBodyXmlReader.java | 8 ++++---- 4 files changed, 33 insertions(+), 20 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/Relationship.java b/src/main/java/org/zwobble/mammoth/internal/docx/Relationship.java index dacd7a6..2e83d54 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/Relationship.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/Relationship.java @@ -1,12 +1,18 @@ package org.zwobble.mammoth.internal.docx; public class Relationship { + private final String relationshipId; private final String target; - public Relationship(String target) { + public Relationship(String relationshipId, String target) { + this.relationshipId = relationshipId; this.target = target; } + public String getRelationshipId() { + return relationshipId; + } + public String getTarget() { return target; } diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/Relationships.java b/src/main/java/org/zwobble/mammoth/internal/docx/Relationships.java index c1dd511..d4d6f2e 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/Relationships.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/Relationships.java @@ -1,21 +1,25 @@ package org.zwobble.mammoth.internal.docx; +import java.util.List; import java.util.Map; -import static org.zwobble.mammoth.internal.util.Maps.lookup; -import static org.zwobble.mammoth.internal.util.Maps.map; +import static org.zwobble.mammoth.internal.util.Lists.list; +import static org.zwobble.mammoth.internal.util.Maps.*; public class Relationships { - public static final Relationships EMPTY = new Relationships(map()); + public static final Relationships EMPTY = new Relationships(list()); - private final Map relationships; + private final Map targetsByRelationshipId; - public Relationships(Map relationships) { - this.relationships = relationships; + public Relationships(List relationships) { + this.targetsByRelationshipId = toMap(relationships, relationship -> entry( + relationship.getRelationshipId(), + relationship.getTarget() + )); } - public Relationship findRelationshipById(String id) { - return lookup(relationships, id) - .orElseThrow(() -> new RuntimeException("Could not find relationship '" + id + "'")); + public String findTargetByRelationshipId(String relationshipId) { + return lookup(targetsByRelationshipId, relationshipId) + .orElseThrow(() -> new RuntimeException("Could not find relationship '" + relationshipId + "'")); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/RelationshipsXml.java b/src/main/java/org/zwobble/mammoth/internal/docx/RelationshipsXml.java index a63065b..3b3e300 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/RelationshipsXml.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/RelationshipsXml.java @@ -1,22 +1,25 @@ package org.zwobble.mammoth.internal.docx; +import org.zwobble.mammoth.internal.util.Lists; import org.zwobble.mammoth.internal.xml.XmlElement; import java.util.Map; +import static org.zwobble.mammoth.internal.util.Lists.eagerMap; import static org.zwobble.mammoth.internal.util.Maps.entry; import static org.zwobble.mammoth.internal.util.Maps.toMap; public class RelationshipsXml { public static Relationships readRelationshipsXmlElement(XmlElement element) { - return new Relationships(toMap( + return new Relationships(eagerMap( element.findChildren("relationships:Relationship"), - RelationshipsXml::readRelationship)); + RelationshipsXml::readRelationship + )); } - private static Map.Entry readRelationship(XmlElement element) { - return entry( - element.getAttribute("Id"), - new Relationship(element.getAttribute("Target"))); + private static Relationship readRelationship(XmlElement element) { + String relationshipId = element.getAttribute("Id"); + String target = element.getAttribute("Target"); + return new Relationship(relationshipId, target); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java index 412ca23..eb13a44 100644 --- a/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java +++ b/src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java @@ -481,7 +481,7 @@ class StatefulBodyXmlReader { ReadResult childrenResult = readElements(element.getChildren()); if (relationshipId.isPresent()) { - String targetHref = relationships.findRelationshipById(relationshipId.get()).getTarget(); + String targetHref = relationships.findTargetByRelationshipId(relationshipId.get()); String href = anchor.map(fragment -> Uris.replaceFragment(targetHref, anchor.get())) .orElse(targetHref); return childrenResult.map(children -> @@ -554,7 +554,7 @@ class StatefulBodyXmlReader { String imagePath = relationshipIdToDocxPath(embedRelationshipId.get()); return readImage(imagePath, altText, () -> Archives.getInputStream(file, imagePath)); } else if (linkRelationshipId.isPresent()) { - String imagePath = relationships.findRelationshipById(linkRelationshipId.get()).getTarget(); + String imagePath = relationships.findTargetByRelationshipId(linkRelationshipId.get()); return readImage(imagePath, altText, () -> fileReader.getInputStream(imagePath)); } else { // TODO: emit warning @@ -579,8 +579,8 @@ class StatefulBodyXmlReader { } private String relationshipIdToDocxPath(String relationshipId) { - Relationship relationship = relationships.findRelationshipById(relationshipId); - return uriToZipEntryName("word", relationship.getTarget()); + String target = relationships.findTargetByRelationshipId(relationshipId); + return uriToZipEntryName("word", target); } private Optional readVal(XmlElementLike element, String name) { -- cgit v1.2.3