aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2018-01-23 20:51:30 +0000
committerMichael Williamson <mike@zwobble.org>2018-01-23 20:51:30 +0000
commitc3c2151b4b0fc9b3226a5ec66e0f7952290f3d97 (patch)
treed5b216ff39695e77ae77dc4ae14a5dfa8f0ef0c5 /src/main/java/org/zwobble
parentd88693d7be4d4d439e9ba9c338fc53e39be64ef6 (diff)
Pass list of Relationship instances into Relationships
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/Relationship.java8
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/Relationships.java22
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/RelationshipsXml.java15
-rw-r--r--src/main/java/org/zwobble/mammoth/internal/docx/StatefulBodyXmlReader.java8
4 files changed, 33 insertions, 20 deletions
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<String, Relationship> relationships;
+ private final Map<String, String> targetsByRelationshipId;
- public Relationships(Map<String, Relationship> relationships) {
- this.relationships = relationships;
+ public Relationships(List<Relationship> 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<String, Relationship> 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<String> readVal(XmlElementLike element, String name) {