Skip to content

Commit bdb93ad

Browse files
committed
Merge #560 from branch '543-fixBatchResetCreatesEmptyRecords' of github.com:metafacture/metafacture-core
2 parents f02d757 + d3a47ee commit bdb93ad

File tree

4 files changed

+59
-18
lines changed

4 files changed

+59
-18
lines changed

metafacture-biblio/src/main/java/org/metafacture/biblio/marc21/MarcXmlEncoder.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public void literal(final String name, final String value) {
212212

213213
@Override
214214
protected void onResetStream() {
215-
pipe.resetStream();
215+
encoder.onResetStream();
216216
}
217217

218218
@Override
@@ -372,7 +372,9 @@ protected void onResetStream() {
372372

373373
@Override
374374
protected void onCloseStream() {
375-
writeFooter();
375+
if (!atStreamStart) {
376+
writeFooter();
377+
}
376378
sendAndClearData();
377379
}
378380

metafacture-biblio/src/test/java/org/metafacture/biblio/marc21/MarcXmlEncoderTest.java

+28
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class MarcXmlEncoderTest {
5151
private static final String RECORD_ID = "92005291";
5252

5353
private static StringBuilder resultCollector;
54+
private static int resultCollectorsResetStreamCount;
5455
private static MarcXmlEncoder encoder;
5556

5657
@Before
@@ -62,6 +63,11 @@ public void setUp() {
6263
public void process(final String obj) {
6364
resultCollector.append(obj);
6465
}
66+
@Override
67+
public void resetStream() {
68+
++resultCollectorsResetStreamCount;
69+
}
70+
6571
});
6672
resultCollector = new StringBuilder();
6773
}
@@ -389,4 +395,26 @@ public void shouldNotEncodeNestedTypeLiteralAsAttribute() {
389395
assertEquals(expected, actual);
390396
}
391397

398+
@Test
399+
public void issue543_shouldNotWriteFooterWhenRecordIsEmpty() {
400+
encoder.closeStream();
401+
String actual = resultCollector.toString();
402+
assertTrue(actual.isEmpty());
403+
}
404+
405+
@Test
406+
public void issue543_shouldOnlyResetStreamOnce() {
407+
resultCollectorsResetStreamCount = 0;
408+
encoder.resetStream();
409+
assertEquals(resultCollectorsResetStreamCount, 1);
410+
}
411+
412+
@Test
413+
public void issue543_shouldOnlyResetStreamOnceUsingWrapper() {
414+
resultCollectorsResetStreamCount = 0;
415+
encoder.setEnsureCorrectMarc21Xml(true);
416+
encoder.resetStream();
417+
assertEquals(resultCollectorsResetStreamCount, 1);
418+
}
419+
392420
}

metafacture-io/src/main/java/org/metafacture/io/ObjectFileWriter.java

+13-10
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,21 @@ public void setCompression(final String compression) {
9090
@Override
9191
public void process(final T obj) {
9292
assert !closed;
93-
try {
94-
if (firstObject) {
95-
getWriter().write(getHeader());
96-
firstObject = false;
93+
final String objStr = obj.toString();
94+
if (!objStr.isEmpty()) {
95+
try {
96+
if (firstObject) {
97+
getWriter().write(getHeader());
98+
firstObject = false;
99+
}
100+
else {
101+
getWriter().write(getSeparator());
102+
}
103+
getWriter().write(objStr);
97104
}
98-
else {
99-
getWriter().write(getSeparator());
105+
catch (final IOException e) {
106+
throw new MetafactureException(e);
100107
}
101-
getWriter().write(obj.toString());
102-
}
103-
catch (final IOException e) {
104-
throw new MetafactureException(e);
105108
}
106109
}
107110

metafacture-io/src/test/java/org/metafacture/io/ObjectFileWriterTest.java

+14-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
import static org.junit.Assert.assertTrue;
2121
import static org.junit.Assume.assumeFalse;
2222

23+
import org.junit.Before;
24+
import org.junit.Rule;
25+
import org.junit.Test;
26+
import org.junit.rules.TemporaryFolder;
27+
import org.metafacture.commons.ResourceUtil;
28+
2329
import java.io.File;
2430
import java.io.FileInputStream;
2531
import java.io.IOException;
@@ -28,12 +34,6 @@
2834
import java.nio.charset.StandardCharsets;
2935
import java.nio.file.Files;
3036

31-
import org.junit.Before;
32-
import org.junit.Rule;
33-
import org.junit.Test;
34-
import org.junit.rules.TemporaryFolder;
35-
import org.metafacture.commons.ResourceUtil;
36-
3737
/**
3838
* Tests for class {@link ObjectFileWriter}.
3939
*
@@ -105,6 +105,14 @@ public void shouldIncrementCountOnResetBeforeStartingNewFile() throws IOExceptio
105105
assertTrue(new File(tempFolder.getRoot(), "test-1").exists());
106106
}
107107

108+
@Test
109+
public void issue543_shouldResultEmptyWhenNothingIsProcessed() throws IOException {
110+
writer.process("");
111+
writer.closeStream();
112+
113+
assertOutput("");
114+
}
115+
108116
@Override
109117
protected ConfigurableObjectWriter<String> getWriter() {
110118
return writer;

0 commit comments

Comments
 (0)