Skip to content

Commit 56c96a3

Browse files
committed
Make generic XML handler value tag name configurable.
1 parent d2b0bdc commit 56c96a3

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

metafacture-xml/src/main/java/org/metafacture/xml/GenericXmlHandler.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ public final class GenericXmlHandler extends DefaultXmlPipe<StreamReceiver> {
4444

4545
public static final String DEFAULT_RECORD_TAG = "record";
4646

47+
public static final String DEFAULT_VALUE_TAG = "value";
48+
4749
public static final boolean EMIT_NAMESPACE = false;
4850

4951
private static final Pattern TABS = Pattern.compile("\t+");
5052

5153
private String attributeMarker = DEFAULT_ATTRIBUTE_MARKER;
5254
private String recordTagName = DEFAULT_RECORD_TAG;
55+
private String valueTagName = DEFAULT_VALUE_TAG;
5356

5457
private boolean inRecord;
5558
private StringBuilder valueBuffer = new StringBuilder();
@@ -95,6 +98,14 @@ public String getRecordTagName() {
9598
return recordTagName;
9699
}
97100

101+
public void setValueTagName(final String valueTagName) {
102+
this.valueTagName = valueTagName;
103+
}
104+
105+
public String getValueTagName() {
106+
return valueTagName;
107+
}
108+
98109
/**
99110
* Triggers namespace awareness. If set to "true" input data like "foo:bar"
100111
* will be passed through as "foo:bar". For backward compatibility the default
@@ -170,7 +181,7 @@ public void characters(final char[] chars, final int start, final int length) {
170181
private void writeValue() {
171182
final String value = valueBuffer.toString();
172183
if (!value.trim().isEmpty()) {
173-
getReceiver().literal("value", value.replace('\n', ' '));
184+
getReceiver().literal(valueTagName, value.replace('\n', ' '));
174185
}
175186
valueBuffer = new StringBuilder();
176187
}

metafacture-xml/src/test/java/org/metafacture/xml/GenericXMLHandlerTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,28 @@ public void shouldEmitPCDataAsALiteralNamedValue() {
133133
ordered.verify(receiver).literal("value", "char-data");
134134
}
135135

136+
@Test
137+
public void shouldEmitPCDataAsALiteralWithConfiguredValueTagName() {
138+
final String name = "data";
139+
genericXmlHandler.setValueTagName(name);
140+
141+
final char[] charData = "char-data".toCharArray();
142+
genericXmlHandler.startElement("", "record", "record", attributes);
143+
genericXmlHandler.startElement("", "entity", "entity", attributes);
144+
genericXmlHandler.characters(charData, 0, charData.length);
145+
genericXmlHandler.endElement("", "entity", "entity");
146+
genericXmlHandler.endElement("", "record", "record");
147+
148+
final InOrder ordered = inOrder(receiver);
149+
ordered.verify(receiver).startRecord("");
150+
ordered.verify(receiver).startEntity("entity");
151+
ordered.verify(receiver).literal(name, "char-data");
152+
ordered.verify(receiver).endEntity();
153+
ordered.verify(receiver).endRecord();
154+
ordered.verifyNoMoreInteractions();
155+
Mockito.verifyNoMoreInteractions(receiver);
156+
}
157+
136158
@Test
137159
public void shouldEmitNamespaceOnEntityElementAndAttribute() {
138160
genericXmlHandler.setEmitNamespace(true);

0 commit comments

Comments
 (0)