Skip to content

Commit 5e943be

Browse files
author
mgeipel
committed
fixed #53
1 parent b950203 commit 5e943be

File tree

2 files changed

+73
-10
lines changed

2 files changed

+73
-10
lines changed

src/main/java/org/culturegraph/mf/stream/sink/SimpleXmlWriter.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.culturegraph.mf.framework.annotations.Out;
3232
import org.culturegraph.mf.types.MultiMap;
3333
import org.culturegraph.mf.util.ResourceUtil;
34+
3435
//import org.apache.commons.lang.StringEscapeUtils;
3536

3637
/**
@@ -55,16 +56,16 @@ public final class SimpleXmlWriter extends DefaultStreamPipe<ObjectReceiver<Stri
5556
private String rootTag = "records";
5657
private boolean start = true;
5758
private boolean separateRoots;
58-
private boolean writeXmlHeader=true;
59+
private boolean writeXmlHeader = true;
5960

6061
public void setRootTag(final String rootTag) {
6162
this.rootTag = rootTag;
6263
}
63-
64+
6465
public void setWriteXmlHeader(final boolean writeXmlHeader) {
6566
this.writeXmlHeader = writeXmlHeader;
6667
}
67-
68+
6869
public void setSeparateRoots(final boolean separateRoots) {
6970
this.separateRoots = separateRoots;
7071
}
@@ -78,11 +79,11 @@ public void setNamespaceFile(final String file) {
7879

7980
private void writeHeader() {
8081
final StringBuilder builder = new StringBuilder();
81-
82-
if(writeXmlHeader){
82+
83+
if (writeXmlHeader) {
8384
builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
8485
}
85-
86+
8687
builder.append("<");
8788
builder.append(rootTag);
8889
for (Entry<String, String> entry : namespaces.entrySet()) {
@@ -116,7 +117,7 @@ public void endRecord() {
116117
} else {
117118
getReceiver().process(element.toString());
118119
}
119-
if(separateRoots){
120+
if (separateRoots) {
120121
writeFooter();
121122
}
122123
}
@@ -153,7 +154,9 @@ public void setRecordTag(final String tag) {
153154

154155
@Override
155156
protected void onCloseStream() {
156-
writeFooter();
157+
if (!separateRoots) {
158+
writeFooter();
159+
}
157160
}
158161

159162
private void writeFooter() {
@@ -190,7 +193,7 @@ public void addAttribute(final String name, final String value) {
190193
attributes.append(" ");
191194
attributes.append(name);
192195
attributes.append("=\"");
193-
escape(attributes,value);
196+
escape(attributes, value);
194197
attributes.append("\"");
195198
}
196199

@@ -230,7 +233,7 @@ public void writeToStringBuilder(final StringBuilder builder, final int indent)
230233

231234
builder.append(">");
232235

233-
escape(builder,text);
236+
escape(builder, text);
234237

235238
for (Element element : children) {
236239
element.writeToStringBuilder(builder, indent + 1);

src/test/java/org/culturegraph/mf/stream/sink/SimpleXmlWriterTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818

1919

20+
import org.culturegraph.mf.framework.DefaultObjectReceiver;
21+
import org.culturegraph.mf.framework.StreamReceiver;
2022
import org.junit.Assert;
2123
import org.junit.Test;
2224

@@ -29,6 +31,9 @@
2931
public final class SimpleXmlWriterTest {
3032

3133

34+
private static final String TAG = "tag";
35+
private static final String VALUE = "value";
36+
3237
//TODO add more tests!
3338

3439

@@ -39,4 +44,59 @@ public void testShouldOnlyEscapeFiveChars() {
3944
SimpleXmlWriter.escape(builder , "&<>'\" üäö");
4045
Assert.assertEquals("&amp;&lt;&gt;&apos;&quot; üäö", builder.toString());
4146
}
47+
48+
@Test
49+
public void testShouldHandleSeparateRoots(){
50+
final SimpleXmlWriter writer = new SimpleXmlWriter();
51+
writer.setRootTag("root");
52+
writer.setRecordTag("record");
53+
writer.setWriteXmlHeader(false);
54+
55+
//separateRoots=false
56+
final StringBuilder builder1 = new StringBuilder();
57+
writer.setReceiver(new DefaultObjectReceiver<String>() {
58+
@Override
59+
public void process(final String obj) {
60+
builder1.append(obj);
61+
}
62+
});
63+
64+
writer.setSeparateRoots(false);
65+
66+
67+
writeTwoRecords(writer);
68+
69+
Assert.assertEquals("<root><record><tag>value</tag></record><record><tag>value</tag></record></root>", builder1.toString().replaceAll("[\\n\\s]", ""));
70+
71+
//separateRoots=true
72+
final StringBuilder builder2 = new StringBuilder();
73+
writer.setReceiver(new DefaultObjectReceiver<String>() {
74+
@Override
75+
public void process(final String obj) {
76+
builder2.append(obj);
77+
}
78+
});
79+
80+
writer.setSeparateRoots(true);
81+
82+
writeTwoRecords(writer);
83+
84+
Assert.assertEquals("<root><record><tag>value</tag></record></root><root><record><tag>value</tag></record></root>", builder2.toString().replaceAll("[\\n\\s]", ""));
85+
86+
87+
}
88+
89+
90+
91+
private static void writeTwoRecords(final StreamReceiver writer) {
92+
writer.startRecord("X");
93+
writer.literal(TAG, VALUE);
94+
writer.endRecord();
95+
writer.startRecord("Y");
96+
writer.literal(TAG, VALUE);
97+
writer.endRecord();
98+
writer.closeStream();
99+
}
100+
101+
42102
}

0 commit comments

Comments
 (0)