Skip to content

Commit 34e7218

Browse files
committed
Resolve #264: merge branch 'blackwinter-implement-null-filter'
Pull request with commits: - Implement NullFilter
2 parents f0883cd + 2ba3043 commit 34e7218

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Copyright 2016 hbz
3+
*
4+
* Licensed under the Apache License, Version 2.0 the "License";
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.culturegraph.mf.mangling;
17+
18+
import org.culturegraph.mf.framework.StreamReceiver;
19+
import org.culturegraph.mf.framework.annotations.Description;
20+
import org.culturegraph.mf.framework.annotations.In;
21+
import org.culturegraph.mf.framework.annotations.Out;
22+
import org.culturegraph.mf.framework.helpers.ForwardingStreamPipe;
23+
24+
/**
25+
* Replaces null values with replacement string, or, if replacement
26+
* string is null (default), discards null values entirely.
27+
*
28+
* @author Jens Wille
29+
*
30+
*/
31+
@Description("Discards or replaces null values")
32+
@In(StreamReceiver.class)
33+
@Out(StreamReceiver.class)
34+
public final class NullFilter extends ForwardingStreamPipe {
35+
36+
private String replacement = null;
37+
38+
public void setReplacement(final String replacement) {
39+
this.replacement = replacement;
40+
}
41+
42+
public String getReplacement() {
43+
return replacement;
44+
}
45+
46+
@Override
47+
public void literal(final String name, final String value) {
48+
if (value != null) {
49+
getReceiver().literal(name, value);
50+
} else if (replacement != null) {
51+
getReceiver().literal(name, replacement);
52+
}
53+
}
54+
55+
}
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/*
2+
* Copyright 2016 hbz
3+
*
4+
* Licensed under the Apache License, Version 2.0 the "License";
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.culturegraph.mf.mangling;
17+
18+
import static org.mockito.Mockito.inOrder;
19+
import static org.mockito.Mockito.verifyNoMoreInteractions;
20+
21+
import org.culturegraph.mf.framework.StreamReceiver;
22+
import org.junit.After;
23+
import org.junit.Before;
24+
import org.junit.Test;
25+
import org.mockito.InOrder;
26+
import org.mockito.Mock;
27+
import org.mockito.MockitoAnnotations;
28+
29+
/**
30+
* Tests for class {@link NullFilter}.
31+
*
32+
* @author Jens Wille
33+
*
34+
*/
35+
public final class NullFilterTest {
36+
37+
private static final String RECORD_ID = "id";
38+
private static final String ENTITY_NAME = "entity-name";
39+
private static final String LITERAL_NAME = "literal-name";
40+
private static final String LITERAL_VALUE = "literal-value";
41+
42+
private NullFilter nullFilter;
43+
44+
@Mock
45+
private StreamReceiver receiver;
46+
47+
@Before
48+
public void setup() {
49+
MockitoAnnotations.initMocks(this);
50+
nullFilter = new NullFilter();
51+
nullFilter.setReceiver(receiver);
52+
}
53+
54+
@After
55+
public void cleanup() {
56+
nullFilter.closeStream();
57+
}
58+
59+
@Test
60+
public void shouldForwardAllEvents() {
61+
nullFilter.startRecord(RECORD_ID);
62+
nullFilter.startEntity(ENTITY_NAME);
63+
nullFilter.literal(LITERAL_NAME, LITERAL_VALUE);
64+
nullFilter.endEntity();
65+
nullFilter.endRecord();
66+
67+
final InOrder ordered = inOrder(receiver);
68+
ordered.verify(receiver).startRecord(RECORD_ID);
69+
ordered.verify(receiver).startEntity(ENTITY_NAME);
70+
ordered.verify(receiver).literal(LITERAL_NAME, LITERAL_VALUE);
71+
ordered.verify(receiver).endEntity();
72+
ordered.verify(receiver).endRecord();
73+
74+
verifyNoMoreInteractions(receiver);
75+
}
76+
77+
@Test
78+
public void shouldDiscardNullValues() {
79+
nullFilter.startRecord(RECORD_ID);
80+
nullFilter.startEntity(ENTITY_NAME);
81+
nullFilter.literal(LITERAL_NAME, LITERAL_VALUE);
82+
nullFilter.literal(LITERAL_NAME, null);
83+
nullFilter.endEntity();
84+
nullFilter.endRecord();
85+
86+
final InOrder ordered = inOrder(receiver);
87+
ordered.verify(receiver).startRecord(RECORD_ID);
88+
ordered.verify(receiver).startEntity(ENTITY_NAME);
89+
ordered.verify(receiver).literal(LITERAL_NAME, LITERAL_VALUE);
90+
ordered.verify(receiver).endEntity();
91+
ordered.verify(receiver).endRecord();
92+
93+
verifyNoMoreInteractions(receiver);
94+
}
95+
96+
@Test
97+
public void shouldReplaceNullValues() {
98+
nullFilter.setReplacement("replacement");
99+
100+
nullFilter.startRecord(RECORD_ID);
101+
nullFilter.startEntity(ENTITY_NAME);
102+
nullFilter.literal(LITERAL_NAME, LITERAL_VALUE);
103+
nullFilter.literal(LITERAL_NAME, null);
104+
nullFilter.endEntity();
105+
nullFilter.endRecord();
106+
107+
final InOrder ordered = inOrder(receiver);
108+
ordered.verify(receiver).startRecord(RECORD_ID);
109+
ordered.verify(receiver).startEntity(ENTITY_NAME);
110+
ordered.verify(receiver).literal(LITERAL_NAME, LITERAL_VALUE);
111+
ordered.verify(receiver).literal(LITERAL_NAME, "replacement");
112+
ordered.verify(receiver).endEntity();
113+
ordered.verify(receiver).endRecord();
114+
115+
verifyNoMoreInteractions(receiver);
116+
}
117+
118+
}

0 commit comments

Comments
 (0)