24
24
25
25
/**
26
26
* Collects strings and emits them as records when a line matches the pattern.
27
- * Appends to every incoming line a line feed so that the original structure
28
- * is preserved.
27
+ * Appends to every incoming line a line feed so that the original structure is
28
+ * preserved.
29
29
*
30
30
* @author Pascal Christoph (dr0i).
31
31
*
32
32
*/
33
- @ Description ( "Collects strings and emits them as records when a"
34
- +" line matches the pattern or the stream is closed." )
35
- @ In ( String .class )
36
- @ Out ( String .class )
37
- @ FluxCommand ( "lines-to-records" )
38
- public final class LineRecorder
39
- implements ObjectPipe <String ,ObjectReceiver <String >> {
33
+ @ Description ("Collects strings and emits them as records when a line matches the pattern or the stream is closed." )
34
+ @ In (String .class )
35
+ @ Out (String .class )
36
+ @ FluxCommand ("lines-to-records" )
37
+ public final class LineRecorder implements ObjectPipe <String , ObjectReceiver <String >> {
40
38
41
- private final static int SB_CAPACITY = 4096 * 7 ;
39
+ private final static int SB_CAPACITY = 4096 * 7 ;
42
40
// empty line is the default
43
- private String recordMarkerRegexp = "^\\ s*$" ;
44
- StringBuilder record = new StringBuilder (
45
- SB_CAPACITY ) ;
46
- ObjectReceiver < String > receiver ;
41
+ private String recordMarkerRegexp = "^\\ s*$" ;
42
+ private StringBuilder record = new StringBuilder (SB_CAPACITY );
43
+ private ObjectReceiver < String > receiver ;
44
+ private boolean isClosed = false ;
47
45
48
- public void setRecordMarkerRegexp ( final String regexp ) {
49
- recordMarkerRegexp = regexp ;
46
+ public void setRecordMarkerRegexp ( final String regexp ) {
47
+ recordMarkerRegexp = regexp ;
50
48
}
51
49
52
50
@ Override
53
- public void process ( final String line ) {
54
- if (line .matches (
55
- recordMarkerRegexp )){
56
- getReceiver ().process (
57
- record .toString ());
58
- record =new StringBuilder (
59
- SB_CAPACITY );
60
- }else
61
- record .append (
62
- line +"\n " );
51
+ public void process (final String line ) {
52
+ assert !isClosed ();
53
+ if (line .matches (recordMarkerRegexp )) {
54
+ getReceiver ().process (record .toString ());
55
+ record = new StringBuilder (SB_CAPACITY );
56
+ } else
57
+ record .append (line + "\n " );
58
+ }
59
+
60
+ private boolean isClosed () {
61
+ return isClosed ;
63
62
}
64
63
65
64
@ Override
66
- public void resetStream ( ) {
67
- record =new StringBuilder (
68
- SB_CAPACITY );
65
+ public void resetStream () {
66
+ record = new StringBuilder (SB_CAPACITY );
69
67
}
70
68
71
69
@ Override
72
- public void closeStream ( ) {
73
- getReceiver ().process (
74
- record . toString ()) ;
70
+ public void closeStream ( ) {
71
+ getReceiver ().process (record . toString ());
72
+ isClosed = true ;
75
73
}
76
74
77
75
@ Override
78
- public <R extends ObjectReceiver <String >> R setReceiver ( R receiver ) {
79
- this .receiver = receiver ;
76
+ public <R extends ObjectReceiver <String >> R setReceiver ( R receiver ) {
77
+ this .receiver = receiver ;
80
78
return receiver ;
81
79
}
82
80
@@ -85,7 +83,7 @@ public <R extends ObjectReceiver<String>> R setReceiver ( R receiver ) {
85
83
*
86
84
* @return reference to the downstream module
87
85
*/
88
- protected final ObjectReceiver <String > getReceiver ( ) {
86
+ protected final ObjectReceiver <String > getReceiver ( ) {
89
87
return receiver ;
90
88
}
91
89
0 commit comments