Skip to content

Commit 5670f12

Browse files
committed
Make sure that item markers followed by suffixed entities do not create unnecessary empty entities.
1 parent 98e5eb3 commit 5670f12

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

src/main/java/org/culturegraph/mf/stream/pipe/bib/PicaItemSplitter.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ public final class PicaItemSplitter extends DefaultStreamPipe<StreamReceiver> {
3737

3838
private String currentSuffix;
3939
private boolean inItemMarker;
40+
private boolean itemMarkerFound;
4041
private String identifier;
4142

4243
@Override
4344
public void startRecord(final String identifier) {
4445
assert !isClosed();
45-
this.currentSuffix = null;
4646
this.inItemMarker = false;
47+
this.itemMarkerFound = false;
4748
this.identifier = identifier;
4849
getReceiver().startRecord(identifier);
4950
}
@@ -60,13 +61,14 @@ public void startEntity(final String name) {
6061

6162
if (ITEM_MARKER.equals(name)) {
6263
inItemMarker = true;
63-
currentSuffix = "";
64+
itemMarkerFound = true;
65+
currentSuffix = null;
6466
getReceiver().endRecord();
6567
getReceiver().startRecord(identifier);
6668
return;
6769
}
6870

69-
if (currentSuffix == null) {
71+
if (!itemMarkerFound) {
7072
getReceiver().startEntity(name);
7173
return;
7274
}
@@ -76,7 +78,7 @@ public void startEntity(final String name) {
7678
suffixStart = name.length();
7779
}
7880
final String suffix = name.substring(suffixStart);
79-
if (!currentSuffix.equals(suffix)) {
81+
if (currentSuffix != null && !currentSuffix.equals(suffix)) {
8082
getReceiver().endRecord();
8183
getReceiver().startRecord(identifier);
8284
}

src/test/java/org/culturegraph/mf/stream/pipe/bib/PicaItemSplitterTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package org.culturegraph.mf.stream.pipe.bib;
1717

1818
import static org.mockito.Mockito.inOrder;
19+
import static org.mockito.Mockito.times;
20+
import static org.mockito.Mockito.verifyNoMoreInteractions;
1921

2022
import org.culturegraph.mf.framework.StreamReceiver;
2123
import org.junit.After;
@@ -83,7 +85,7 @@ public void testShouldSplitAtItemMarkerEntities() {
8385
}
8486

8587
@Test
86-
public void testShouldCreateEmptyRecordsIfNothingBeforeOrAfterItemMarkers() {
88+
public void testShouldCreateEmptyRecordsIfNoContentIsBeforeOrAfterItemMarkers() {
8789
picaItemSplitter.startRecord(RECORD_ID);
8890
emitItemMarkerEntity();
8991
emitItemMarkerEntity();
@@ -97,6 +99,25 @@ public void testShouldCreateEmptyRecordsIfNothingBeforeOrAfterItemMarkers() {
9799
ordered.verify(receiver).endRecord();
98100
ordered.verify(receiver).startRecord(RECORD_ID);
99101
ordered.verify(receiver).endRecord();
102+
verifyNoMoreInteractions(receiver);
103+
}
104+
105+
@Test
106+
public void testShouldNotCreateTwoEmptyRecordsIfFirstEntityAfterItemMarkerHasSuffix() {
107+
picaItemSplitter.startRecord(RECORD_ID);
108+
emitEntity();
109+
emitItemMarkerEntity();
110+
emitSuffixedEntity1();
111+
picaItemSplitter.endRecord();
112+
113+
final InOrder ordered = inOrder(receiver);
114+
ordered.verify(receiver).startRecord(RECORD_ID);
115+
verifyEntity(ordered);
116+
ordered.verify(receiver).endRecord();
117+
ordered.verify(receiver).startRecord(RECORD_ID);
118+
verifySuffixedEntityStripped(ordered);
119+
ordered.verify(receiver).endRecord();
120+
verifyNoMoreInteractions(receiver);
100121
}
101122

102123
@Test
@@ -130,7 +151,7 @@ public void testShouldSplitWhenSuffixChanges() {
130151
ordered.verify(receiver).endRecord();
131152
ordered.verify(receiver).startRecord(RECORD_ID);
132153
verifySuffixedEntityStripped(ordered);
133-
ordered.verify(receiver).endRecord();
154+
ordered.verify(receiver).endRecord();
134155
}
135156

136157
@Test
@@ -147,6 +168,7 @@ public void testShouldOnlySplitOnSuffixChangeAfterFirstItemMarkerEntity() {
147168
verifySuffixedEntity1(ordered);
148169
verifySuffixedEntity2(ordered);
149170
ordered.verify(receiver).endRecord();
171+
verifyNoMoreInteractions(receiver);
150172
}
151173

152174
private void emitEntity() {

0 commit comments

Comments
 (0)