Skip to content

Commit e132278

Browse files
committed
Merge branch 'issue-338-else-nested-preserve-same-entity'
Preserve same entity in nested pass-through (_elseNested) (2/2).
2 parents ab2bfff + 91569fc commit e132278

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

metamorph/src/main/java/org/metafacture/metamorph/Metamorph.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,11 +338,11 @@ else if (fallbackReceiver != null) {
338338
elseNestedEntityStarted = true;
339339
}
340340

341-
send(currentLiteralName, value, fallbackReceiver);
341+
send(escapeFeedbackChar(currentLiteralName), value, fallbackReceiver);
342342
}
343343
}
344344
else {
345-
send(path, value, fallbackReceiver);
345+
send(escapeFeedbackChar(path), value, fallbackReceiver);
346346
}
347347
}
348348
}
@@ -363,6 +363,14 @@ private void send(final String path, final String value, final List<NamedValueRe
363363
}
364364
}
365365

366+
private boolean startsWithFeedbackChar(final String name) {
367+
return name.length() != 0 && name.charAt(0) == FEEDBACK_CHAR;
368+
}
369+
370+
private String escapeFeedbackChar(final String name) {
371+
return name == null ? null : (startsWithFeedbackChar(name) ? ESCAPE_CHAR : "") + name;
372+
}
373+
366374
/**
367375
* @param streamReceiver
368376
* the outputHandler to set
@@ -388,7 +396,7 @@ public void receive(final String name, final String value, final NamedValueSourc
388396
"encountered literal with name='null'. This indicates a bug in a function or a collector.");
389397
}
390398

391-
if (name.length() != 0 && name.charAt(0) == FEEDBACK_CHAR) {
399+
if (startsWithFeedbackChar(name)) {
392400
dispatch(name, value, null, false);
393401
return;
394402
}

metamorph/src/test/java/org/metafacture/metamorph/TestMetamorphBasics.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,25 +106,29 @@ private void testElseData(final String elseKeyword) {
106106
"</rules>",
107107
i -> {
108108
i.startRecord("1");
109+
i.literal("@id", "123");
109110
i.literal("Shikotan", "Aekap");
110111
i.startEntity("Germany");
111112
i.literal("Langeoog", "Moin");
112113
i.literal("Sylt", "Aloha");
113114
i.literal("Borkum", "Tach");
114115
i.endEntity();
115116
i.startEntity("Germany");
117+
i.literal("@foo", "bar");
116118
i.literal("Baltrum", "Moin Moin");
117119
i.endEntity();
118120
i.endRecord();
119121
},
120122
o -> {
121123
o.get().startRecord("1");
124+
o.get().literal("@id", "123");
122125
o.get().literal("Shikotan", "Aekap");
123126
o.get().literal("Germany.Langeoog", "Moin");
124127
o.get().startEntity("Germany");
125128
o.get().literal("Hawaii", "Aloha");
126129
o.get().literal("Germany.Borkum", "Tach");
127130
o.get().endEntity();
131+
o.get().literal("Germany.@foo", "bar");
128132
o.get().literal("Germany.Baltrum", "Moin Moin");
129133
o.get().endRecord();
130134
}
@@ -223,8 +227,10 @@ public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource() {
223227
"</rules>",
224228
i -> {
225229
i.startRecord("1");
230+
i.literal("@id", "123");
226231
i.literal("Shikotan", "Aekap");
227232
i.startEntity("Germany");
233+
i.literal("@foo", "bar");
228234
i.literal("Langeoog", "Moin");
229235
i.literal("Baltrum", "Moin Moin");
230236
i.endEntity();
@@ -235,8 +241,10 @@ public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource() {
235241
},
236242
o -> {
237243
o.get().startRecord("1");
244+
o.get().literal("@id", "123");
238245
o.get().literal("Shikotan", "Aekap");
239246
o.get().startEntity("Germany");
247+
o.get().literal("@foo", "bar");
240248
o.get().literal("Langeoog", "Moin");
241249
o.get().literal("Baltrum", "Moin Moin");
242250
o.get().endEntity();

0 commit comments

Comments
 (0)