Skip to content

Commit 13b1885

Browse files
authored
Merge pull request #219 from metafacture/147-emitEntities
Add option to emit repeated fields as entities (#147)
2 parents 57dd969 + 51816a3 commit 13b1885

File tree

3 files changed

+53
-2
lines changed

3 files changed

+53
-2
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ subprojects {
7777
}
7878

7979
checkstyle {
80-
toolVersion '8.30'
80+
toolVersion '8.44'
8181
}
8282

8383
tasks.withType(JavaCompile) {

metafix/src/main/java/org/metafacture/metafix/Metafix.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class Metafix implements StreamPipe<StreamReceiver>, Maps { // checkstyle
8282
private Record currentRecord = new Record();
8383
private StreamReceiver outputStreamReceiver;
8484
private Strictness strictness = DEFAULT_STRICTNESS;
85+
private boolean repeatedFieldsToEntities;
8586
private String fixFile;
8687
private String recordIdentifier;
8788
private int entityCount;
@@ -199,7 +200,7 @@ public void endRecord() {
199200

200201
private void emit(final String field, final Value value) {
201202
Value.asList(value, array -> {
202-
final boolean isMulti = isArrayName(field);
203+
final boolean isMulti = repeatedFieldsToEntities && array.size() > 1 || isArrayName(field);
203204
if (isMulti) {
204205
outputStreamReceiver.startEntity(field);
205206
}
@@ -349,6 +350,14 @@ public Strictness getStrictness() {
349350
return strictness;
350351
}
351352

353+
public void setRepeatedFieldsToEntities(final boolean repeatedFieldsToEntities) {
354+
this.repeatedFieldsToEntities = repeatedFieldsToEntities;
355+
}
356+
357+
public boolean getRepeatedFieldsToEntities() {
358+
return repeatedFieldsToEntities;
359+
}
360+
352361
public enum Strictness {
353362

354363
/**

metafix/src/test/java/org/metafacture/metafix/MetafixRecordTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2298,6 +2298,48 @@ public void transformRepeatedField() {
22982298
);
22992299
}
23002300

2301+
@Test
2302+
public void emitEntityForRepeatedField() {
2303+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
2304+
"nothing()"
2305+
),
2306+
i -> {
2307+
i.setRepeatedFieldsToEntities(true);
2308+
i.startRecord("1");
2309+
i.literal("name", "max");
2310+
i.literal("name", "mo");
2311+
i.endRecord();
2312+
},
2313+
o -> {
2314+
o.get().startRecord("1");
2315+
o.get().startEntity("name");
2316+
o.get().literal("1", "max");
2317+
o.get().literal("2", "mo");
2318+
o.get().endEntity();
2319+
o.get().endRecord();
2320+
}
2321+
);
2322+
}
2323+
2324+
@Test
2325+
public void dontEmitEntityForSingleField() {
2326+
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(
2327+
"nothing()"
2328+
),
2329+
i -> {
2330+
i.setRepeatedFieldsToEntities(true);
2331+
i.startRecord("1");
2332+
i.literal("name", "max");
2333+
i.endRecord();
2334+
},
2335+
o -> {
2336+
o.get().startRecord("1");
2337+
o.get().literal("name", "max");
2338+
o.get().endRecord();
2339+
}
2340+
);
2341+
}
2342+
23012343
public void shouldNotAccessArrayImplicitly() {
23022344
MetafixTestHelpers.assertExecutionException(IllegalStateException.class, "Expected String, got Array", () ->
23032345
MetafixTestHelpers.assertFix(streamReceiver, Arrays.asList(

0 commit comments

Comments
 (0)