Skip to content

Commit 43c52c3

Browse files
committed
Modifies the Counter module to allow pipe lining
Additionally, this commits makes the module available in Flux. That is not really useful but helps finding the module. (cherry picked from commit eaf9153)
1 parent 0b470e5 commit 43c52c3

File tree

5 files changed

+81
-66
lines changed

5 files changed

+81
-66
lines changed

src/main/java/org/culturegraph/mf/stream/sink/Counter.java renamed to src/main/java/org/culturegraph/mf/stream/pipe/Counter.java

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,33 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package org.culturegraph.mf.stream.sink;
16+
package org.culturegraph.mf.stream.pipe;
1717

18-
import org.culturegraph.mf.framework.DefaultStreamReceiver;
18+
import org.culturegraph.mf.framework.DefaultStreamPipe;
19+
import org.culturegraph.mf.framework.StreamReceiver;
20+
import org.culturegraph.mf.framework.annotations.Description;
21+
import org.culturegraph.mf.framework.annotations.In;
22+
import org.culturegraph.mf.framework.annotations.Out;
1923

2024

2125
/**
2226
* Counts the number of records and fields read. Used mainly for test cases and
2327
* debugging.
24-
*
25-
* @author Markus Michael Geipel, Christoph Böhme
26-
*
28+
*
29+
* @author Markus Michael Geipel
30+
* @author Christoph Böhme
31+
* @author Michael Büchner
32+
*
2733
*/
28-
public final class Counter extends DefaultStreamReceiver {
29-
30-
private boolean closed;
34+
@Description("Counts the number of records and fields read.")
35+
@In(StreamReceiver.class)
36+
@Out(StreamReceiver.class)
37+
public final class Counter extends DefaultStreamPipe<StreamReceiver> {
38+
3139
private int numRecords;
3240
private int numEntities;
3341
private int numLiterals;
34-
42+
3543
/**
3644
* @return the numRecords
3745
*/
@@ -52,53 +60,62 @@ public int getNumEntities() {
5260
public int getNumLiterals() {
5361
return numLiterals;
5462
}
55-
56-
/**
57-
*
58-
* @return true if the stream is closed
59-
*/
60-
public boolean isClosed() {
61-
return closed;
62-
}
6363

6464
@Override
6565
public void startRecord(final String identifier) {
66-
assert !closed;
66+
assert !isClosed();
6767
++numRecords;
68+
if(getReceiver() != null) {
69+
getReceiver().startRecord(identifier);
70+
}
6871
}
6972

7073
@Override
7174
public void startEntity(final String name) {
72-
assert !closed;
75+
assert !isClosed();
7376
++numEntities;
77+
if(getReceiver() != null) {
78+
getReceiver().startEntity(name);
79+
}
7480
}
7581

7682
@Override
7783
public void literal(final String name, final String value) {
78-
assert !closed;
84+
assert !isClosed();
7985
++numLiterals;
86+
if(getReceiver() != null) {
87+
getReceiver().literal(name, value);
88+
}
89+
}
90+
91+
@Override
92+
public void endRecord() {
93+
if(getReceiver() != null) {
94+
getReceiver().endRecord();
95+
}
8096
}
8197

8298
@Override
83-
public void resetStream() {
84-
closed = false;
99+
public void endEntity() {
100+
if(getReceiver() != null) {
101+
getReceiver().endEntity();
102+
}
103+
}
104+
105+
@Override
106+
public void onResetStream() {
85107
numRecords = 0;
86108
numEntities = 0;
87109
numLiterals = 0;
88110
}
89-
90-
@Override
91-
public void closeStream() {
92-
closed = true;
93-
}
94-
111+
95112
@Override
96113
public String toString() {
97114
String streamClosed = "";
98-
if (closed) {
115+
if (isClosed()) {
99116
streamClosed =" Stream has been closed.";
100117
}
101-
118+
102119
return "counted " + numRecords + " records, " + numEntities + " entities, " + numLiterals + " literals." + streamClosed;
103120
}
104121
}

src/main/resources/flux-commands.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ generic-xml org.culturegraph.mf.stream.reader.GenericXmlReader
8484

8585
match org.culturegraph.mf.stream.pipe.StringMatcher
8686

87+
stream-count org.culturegraph.mf.stream.pipe.Counter
88+
8789
extract-literals org.culturegraph.mf.stream.converter.LiteralExtractor
8890
object-to-literal org.culturegraph.mf.stream.converter.ObjectToLiteral
8991

src/test/java/org/culturegraph/mf/stream/converter/bib/SimpleMabReaderTest.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@
2525
import org.culturegraph.mf.exceptions.FormatException;
2626
import org.culturegraph.mf.stream.DataFilePath;
2727
import org.culturegraph.mf.stream.converter.LineReader;
28-
import org.culturegraph.mf.stream.converter.bib.MabDecoder;
29-
import org.culturegraph.mf.stream.sink.Counter;
28+
import org.culturegraph.mf.stream.pipe.Counter;
3029
import org.culturegraph.mf.stream.sink.StreamValidator;
3130
import org.culturegraph.mf.stream.source.ResourceOpener;
3231
import org.culturegraph.mf.types.Event;
@@ -40,58 +39,58 @@
4039
* @see MabDecoder
4140
*/
4241
public final class SimpleMabReaderTest {
43-
42+
4443
private static final int NUM_RECORDS = 10;
4544
private static final int NUM_LITERALS = 520;
46-
45+
4746

4847
@Test
4948
public void testRead(){
5049
final ResourceOpener opener = new ResourceOpener();
5150
final Counter countStreamReceiver = opener.setReceiver(new LineReader())
5251
.setReceiver(new MabDecoder())
5352
.setReceiver(new Counter());
54-
53+
5554
opener.process(DataFilePath.TITLE_MAB);
5655
opener.closeStream();
57-
56+
5857
Assert.assertEquals("Number of read records is incorrect", NUM_RECORDS, countStreamReceiver.getNumRecords());
5958
Assert.assertEquals("Number of read literals is incorrect", NUM_LITERALS, countStreamReceiver.getNumLiterals());
6059
}
61-
60+
6261
@Test
6362
public void testGetId() throws IOException {
6463
final InputStream inputStream = Thread.currentThread()
6564
.getContextClassLoader().getResourceAsStream(DataFilePath.TITLE_MAB);
66-
65+
6766
final BufferedReader breader = new BufferedReader(new InputStreamReader(inputStream));
68-
67+
6968
String line = breader.readLine();
7069
while (line != null) {
7170
if(!line.isEmpty()){
7271
Assert.assertNotNull(MabDecoder.extractIdFromRecord(line));
7372
}
7473
line = breader.readLine();
7574
}
76-
75+
7776
breader.close();
7877
}
79-
78+
8079
@Test
8180
public void testSkipEmptyStrings() {
8281
final MabDecoder decoder = new MabDecoder();
83-
82+
8483
final List<Event> expected = Collections.emptyList();
8584
final StreamValidator validator = new StreamValidator(expected);
86-
85+
8786
decoder.setReceiver(validator);
88-
87+
8988
try {
9089
decoder.process(" ");
9190
decoder.closeStream();
92-
} catch (FormatException e) {
91+
} catch (final FormatException e) {
9392
Assert.fail(e.toString());
9493
}
9594
}
96-
95+
9796
}

src/test/java/org/culturegraph/mf/stream/converter/bib/SimpleMarcReaderTest.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
import org.culturegraph.mf.exceptions.FormatException;
2626
import org.culturegraph.mf.stream.DataFilePath;
2727
import org.culturegraph.mf.stream.converter.LineReader;
28-
import org.culturegraph.mf.stream.converter.bib.MabDecoder;
29-
import org.culturegraph.mf.stream.converter.bib.MarcDecoder;
30-
import org.culturegraph.mf.stream.sink.Counter;
28+
import org.culturegraph.mf.stream.pipe.Counter;
3129
import org.culturegraph.mf.stream.sink.StreamValidator;
3230
import org.culturegraph.mf.stream.source.ResourceOpener;
3331
import org.culturegraph.mf.types.Event;
@@ -41,34 +39,34 @@
4139
* @see MabDecoder
4240
*/
4341
public final class SimpleMarcReaderTest {
44-
42+
4543
private static final int NUM_RECORDS = 10;
4644
private static final int NUM_LITERALS = 745;
47-
4845

4946

50-
47+
48+
5149
@Test
5250
public void testRead(){
5351
final ResourceOpener opener = new ResourceOpener();
5452

5553
final Counter countStreamReceiver = opener.setReceiver(new LineReader())
5654
.setReceiver(new MarcDecoder())
5755
.setReceiver(new Counter());
58-
56+
5957
opener.process(DataFilePath.TITLE_MARC);
6058
opener.closeStream();
61-
59+
6260
Assert.assertEquals("Number of read records is incorrect", NUM_RECORDS, countStreamReceiver.getNumRecords());
6361
Assert.assertEquals("Number of read literals is incorrect", NUM_LITERALS, countStreamReceiver.getNumLiterals());
6462
}
65-
63+
6664
@Test
6765
public void testGetId() throws IOException {
6866
final InputStream inputStream = Thread.currentThread()
6967
.getContextClassLoader().getResourceAsStream(DataFilePath.TITLE_MARC);
7068
final BufferedReader breader = new BufferedReader(new InputStreamReader(inputStream));
71-
69+
7270
String line = breader.readLine();
7371
while (line != null) {
7472
if(!line.isEmpty()){
@@ -78,22 +76,22 @@ public void testGetId() throws IOException {
7876
}
7977
breader.close();
8078
}
81-
79+
8280
@Test
8381
public void testSkipEmptyStrings() {
8482
final MarcDecoder decoder = new MarcDecoder();
85-
83+
8684
final List<Event> expected = Collections.emptyList();
8785
final StreamValidator validator = new StreamValidator(expected);
88-
86+
8987
decoder.setReceiver(validator);
90-
88+
9189
try {
9290
decoder.process(" ");
9391
decoder.closeStream();
94-
} catch (FormatException e) {
92+
} catch (final FormatException e) {
9593
Assert.fail(e.toString());
9694
}
9795
}
98-
96+
9997
}

src/test/java/org/culturegraph/mf/stream/pipe/SplitterTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@
2323
import org.culturegraph.mf.morph.DataFilePath;
2424
import org.culturegraph.mf.stream.reader.PicaReader;
2525
import org.culturegraph.mf.stream.reader.Reader;
26-
import org.culturegraph.mf.stream.sink.Counter;
2726
import org.junit.Test;
2827

2928

3029
/**
3130
* Tests {@link Splitter}.
32-
*
31+
*
3332
* @author Markus Michael Geipel
34-
*
33+
*
3534
*/
3635
public final class SplitterTest {
3736

@@ -56,5 +55,5 @@ public void testCorrectTeeFunction() throws IOException {
5655
assertEquals(NUM_TN_RECORDS, countingWriterTn.getNumRecords());
5756
assertEquals(NUM_TP_RECORDS, countingWriterTp.getNumRecords());
5857
}
59-
58+
6059
}

0 commit comments

Comments
 (0)