Skip to content

Commit 5786446

Browse files
committed
Don't duplicate element value when adding it as a subfield
See #350
1 parent 252f9f5 commit 5786446

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

metafacture-html/src/main/java/org/metafacture/html/HtmlDecoder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,15 @@ private void process(Element parent, StreamReceiver receiver) {
8282
for (Element element : parent.children()) {
8383
receiver.startEntity(element.nodeName());
8484
Attributes attributes = element.attributes();
85+
boolean addedValueAsSubfield = false;
8586
for (Attribute attribute : attributes) {
86-
handleAttributeValuesAsSubfields(receiver, element, attributes, attribute);
87+
addedValueAsSubfield = handleAttributeValuesAsSubfields(receiver, element, attributes, attribute);
8788
receiver.literal(attribute.getKey(), attribute.getValue());
8889
}
8990
if (element.children().isEmpty()) {
9091
String text = element.text().trim();
9192
String value = text.isEmpty() ? element.data() : text;
92-
if (!value.isEmpty()) {
93+
if (!value.isEmpty() && !addedValueAsSubfield) {
9394
receiver.literal("value", value);
9495
}
9596
}
@@ -98,18 +99,20 @@ private void process(Element parent, StreamReceiver receiver) {
9899
}
99100
}
100101

101-
private void handleAttributeValuesAsSubfields(StreamReceiver receiver, Element element,
102+
private boolean handleAttributeValuesAsSubfields(StreamReceiver receiver, Element element,
102103
Attributes attributes, Attribute attribute) {
103104
String fullFieldKey = element.nodeName() + "." + attribute.getKey();
104105
if (attrValsAsSubfields.containsKey(fullFieldKey)) {
105106
String configValue = attrValsAsSubfields.get(fullFieldKey);
106107
if (configValue.trim().isEmpty()) {
107108
receiver.literal(attribute.getValue(), element.text().trim());
109+
return true;
108110
} else {
109111
String value = attributes.get(configValue);
110112
receiver.literal(attribute.getValue(), value);
111113
}
112114
}
115+
return false;
113116
}
114117

115118
public void setAttrValsAsSubfields(String mapString) {
@@ -128,4 +131,5 @@ public void setAttrValsAsSubfields(String mapString) {
128131
}
129132
}
130133
}
134+
131135
}

metafacture-html/src/test/java/org/metafacture/html/HtmlDecoderTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.mockito.Mockito.inOrder;
1919
import static org.mockito.Mockito.times;
20+
import static org.mockito.Mockito.never;
2021

2122
import java.io.StringReader;
2223

@@ -103,16 +104,19 @@ public void htmlAttributesAsSubfieldsDefault() {
103104
final InOrder ordered = inOrder(receiver);
104105
ordered.verify(receiver).startEntity("meta");
105106
ordered.verify(receiver).literal("language", "DE");
107+
ordered.verify(receiver).literal("name", "language");
108+
ordered.verify(receiver).literal("content", "DE");
106109
ordered.verify(receiver, times(4)).endEntity();
107110
}
108-
111+
109112
@Test
110113
public void htmlAttributesAsSubfieldsCustom() {
111114
htmlDecoder.setAttrValsAsSubfields("mods:url.access");
112115
htmlDecoder.process(new StringReader("<mods:url access=\"preview\">file:///img.png</mods:url>"));
113116
final InOrder ordered = inOrder(receiver);
114117
ordered.verify(receiver).startEntity("mods:url");
115118
ordered.verify(receiver).literal("preview", "file:///img.png");
119+
ordered.verify(receiver, never()).literal("value", "file:///img.png");
116120
ordered.verify(receiver, times(3)).endEntity();
117121
}
118122

@@ -126,6 +130,7 @@ public void htmlAttributesAsSubfieldsDefaultPlusCustom() {
126130
ordered.verify(receiver).literal("language", "DE");
127131
ordered.verify(receiver).startEntity("mods:url");
128132
ordered.verify(receiver).literal("preview", "file:///img.png");
133+
ordered.verify(receiver, never()).literal("value", "file:///img.png");
129134
ordered.verify(receiver, times(3)).endEntity();
130135
}
131136
}

0 commit comments

Comments
 (0)