Skip to content

Commit 71efb2d

Browse files
committed
Changed PicaItemSplitter to wrap items in entities instead of creating
multiple records.
1 parent 353241e commit 71efb2d

File tree

2 files changed

+41
-32
lines changed

2 files changed

+41
-32
lines changed

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

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,31 @@
3232
@Out(StreamReceiver.class)
3333
public final class PicaItemSplitter extends DefaultStreamPipe<StreamReceiver> {
3434

35+
public static final String ITEM_ENTITY_NAME = "_item";
36+
3537
private static final String ITEM_MARKER = "101@";
3638
private static final char SUFFIX_SEPARATOR = '/';
3739

3840
private String currentSuffix;
3941
private boolean inItemMarker;
4042
private boolean itemMarkerFound;
41-
private String identifier;
4243

4344
@Override
4445
public void startRecord(final String identifier) {
4546
assert !isClosed();
46-
this.inItemMarker = false;
47-
this.itemMarkerFound = false;
48-
this.identifier = identifier;
47+
48+
inItemMarker = false;
49+
itemMarkerFound = false;
4950
getReceiver().startRecord(identifier);
5051
}
5152

5253
@Override
5354
public void endRecord() {
54-
assert !isClosed();
55+
assert !isClosed();
56+
57+
if (itemMarkerFound) {
58+
getReceiver().endEntity();
59+
}
5560
getReceiver().endRecord();
5661
}
5762

@@ -60,11 +65,13 @@ public void startEntity(final String name) {
6065
assert !isClosed();
6166

6267
if (ITEM_MARKER.equals(name)) {
68+
if (itemMarkerFound) {
69+
getReceiver().endEntity();
70+
}
71+
getReceiver().startEntity(ITEM_ENTITY_NAME);
6372
inItemMarker = true;
6473
itemMarkerFound = true;
6574
currentSuffix = null;
66-
getReceiver().endRecord();
67-
getReceiver().startRecord(identifier);
6875
return;
6976
}
7077

@@ -79,8 +86,10 @@ public void startEntity(final String name) {
7986
}
8087
final String suffix = name.substring(suffixStart);
8188
if (currentSuffix != null && !currentSuffix.equals(suffix)) {
82-
getReceiver().endRecord();
83-
getReceiver().startRecord(identifier);
89+
if (itemMarkerFound) {
90+
getReceiver().endEntity();
91+
}
92+
getReceiver().startEntity(ITEM_ENTITY_NAME);
8493
}
8594
currentSuffix = suffix;
8695
getReceiver().startEntity(name.substring(0, suffixStart));

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

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
*/
1616
package org.culturegraph.mf.stream.pipe.bib;
1717

18+
import static org.mockito.Mockito.calls;
1819
import static org.mockito.Mockito.inOrder;
19-
import static org.mockito.Mockito.times;
2020
import static org.mockito.Mockito.verifyNoMoreInteractions;
2121

2222
import org.culturegraph.mf.framework.StreamReceiver;
@@ -75,17 +75,17 @@ public void testShouldSplitAtItemMarkerEntities() {
7575
final InOrder ordered = inOrder(receiver);
7676
ordered.verify(receiver).startRecord(RECORD_ID);
7777
verifyEntity(ordered);
78-
ordered.verify(receiver).endRecord();
79-
ordered.verify(receiver).startRecord(RECORD_ID);
78+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
8079
verifyEntity(ordered);
81-
ordered.verify(receiver).endRecord();
82-
ordered.verify(receiver).startRecord(RECORD_ID);
80+
ordered.verify(receiver).endEntity();
81+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
8382
verifyEntity(ordered);
83+
ordered.verify(receiver).endEntity();
8484
ordered.verify(receiver).endRecord();
8585
}
8686

8787
@Test
88-
public void testShouldCreateEmptyRecordsIfNoContentIsBeforeOrAfterItemMarkers() {
88+
public void testShouldCreateEmptyEntitiesIfNoContentIsBeforeOrAfterItemMarkers() {
8989
picaItemSplitter.startRecord(RECORD_ID);
9090
emitItemMarkerEntity();
9191
emitItemMarkerEntity();
@@ -94,16 +94,16 @@ public void testShouldCreateEmptyRecordsIfNoContentIsBeforeOrAfterItemMarkers()
9494

9595
final InOrder ordered = inOrder(receiver);
9696
ordered.verify(receiver).startRecord(RECORD_ID);
97-
ordered.verify(receiver).endRecord();
98-
ordered.verify(receiver).startRecord(RECORD_ID);
99-
ordered.verify(receiver).endRecord();
100-
ordered.verify(receiver).startRecord(RECORD_ID);
97+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
98+
ordered.verify(receiver).endEntity();
99+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
100+
ordered.verify(receiver).endEntity();
101101
ordered.verify(receiver).endRecord();
102102
verifyNoMoreInteractions(receiver);
103103
}
104104

105105
@Test
106-
public void testShouldNotCreateTwoEmptyRecordsIfFirstEntityAfterItemMarkerHasSuffix() {
106+
public void testShouldNotCreateTwoEmptyEntitiesIfFirstEntityAfterItemMarkerHasSuffix() {
107107
picaItemSplitter.startRecord(RECORD_ID);
108108
emitEntity();
109109
emitItemMarkerEntity();
@@ -113,9 +113,9 @@ public void testShouldNotCreateTwoEmptyRecordsIfFirstEntityAfterItemMarkerHasSuf
113113
final InOrder ordered = inOrder(receiver);
114114
ordered.verify(receiver).startRecord(RECORD_ID);
115115
verifyEntity(ordered);
116-
ordered.verify(receiver).endRecord();
117-
ordered.verify(receiver).startRecord(RECORD_ID);
116+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
118117
verifySuffixedEntityStripped(ordered);
118+
ordered.verify(receiver).endEntity();
119119
ordered.verify(receiver).endRecord();
120120
verifyNoMoreInteractions(receiver);
121121
}
@@ -129,9 +129,9 @@ public void testShouldRemoveSuffix() {
129129

130130
final InOrder ordered = inOrder(receiver);
131131
ordered.verify(receiver).startRecord(RECORD_ID);
132-
ordered.verify(receiver).endRecord();
133-
ordered.verify(receiver).startRecord(RECORD_ID);
132+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
134133
verifySuffixedEntityStripped(ordered);
134+
ordered.verify(receiver).endEntity();
135135
ordered.verify(receiver).endRecord();
136136
}
137137

@@ -145,12 +145,12 @@ public void testShouldSplitWhenSuffixChanges() {
145145

146146
final InOrder ordered = inOrder(receiver);
147147
ordered.verify(receiver).startRecord(RECORD_ID);
148-
ordered.verify(receiver).endRecord();
149-
ordered.verify(receiver).startRecord(RECORD_ID);
148+
150149
verifySuffixedEntityStripped(ordered);
151-
ordered.verify(receiver).endRecord();
152-
ordered.verify(receiver).startRecord(RECORD_ID);
150+
ordered.verify(receiver).endEntity();
151+
ordered.verify(receiver).startEntity(PicaItemSplitter.ITEM_ENTITY_NAME);
153152
verifySuffixedEntityStripped(ordered);
153+
ordered.verify(receiver).endEntity();
154154
ordered.verify(receiver).endRecord();
155155
}
156156

@@ -198,25 +198,25 @@ private void emitItemMarkerEntity() {
198198
private void verifyEntity(final InOrder ordered) {
199199
ordered.verify(receiver).startEntity(ENTITY);
200200
ordered.verify(receiver).literal(LITERAL, VALUE);
201-
ordered.verify(receiver).endEntity();
201+
ordered.verify(receiver, calls(1)).endEntity();
202202
}
203203

204204
private void verifySuffixedEntity1(final InOrder ordered) {
205205
ordered.verify(receiver).startEntity(ENTITY_WITH_SUFFIX1);
206206
ordered.verify(receiver).literal(LITERAL, VALUE);
207-
ordered.verify(receiver).endEntity();
207+
ordered.verify(receiver, calls(1)).endEntity();
208208
}
209209

210210
private void verifySuffixedEntity2(final InOrder ordered) {
211211
ordered.verify(receiver).startEntity(ENTITY_WITH_SUFFIX2);
212212
ordered.verify(receiver).literal(LITERAL, VALUE);
213-
ordered.verify(receiver).endEntity();
213+
ordered.verify(receiver, calls(1)).endEntity();
214214
}
215215

216216
private void verifySuffixedEntityStripped(final InOrder ordered) {
217217
ordered.verify(receiver).startEntity(ENTITY_WITH_SUFFIX_STRIPPED);
218218
ordered.verify(receiver).literal(LITERAL, VALUE);
219-
ordered.verify(receiver).endEntity();
219+
ordered.verify(receiver, calls(1)).endEntity();
220220
}
221221

222222
}

0 commit comments

Comments
 (0)