Skip to content

Commit 8df3f21

Browse files
committed
Simplify a9196f7.
1 parent 9b2f70e commit 8df3f21

File tree

2 files changed

+40
-27
lines changed

2 files changed

+40
-27
lines changed

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

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ public final class Metamorph implements StreamPipe<StreamReceiver>, NamedValuePi
8282
private static final InterceptorFactory NULL_INTERCEPTOR_FACTORY = new NullInterceptorFactory();
8383
private static final Map<String, String> NO_VARS = Collections.emptyMap();
8484

85-
private final Registry<NamedValueReceiver> dataRegistry =
86-
new WildcardRegistry<>();
85+
private final Registry<NamedValueReceiver> dataRegistry = new WildcardRegistry<>();
8786
private final List<NamedValueReceiver> elseSources = new ArrayList<>();
8887

8988
private final Map<String, Map<String, String>> maps = new HashMap<>();
@@ -103,7 +102,7 @@ public final class Metamorph implements StreamPipe<StreamReceiver>, NamedValuePi
103102
private boolean elseNestedEntityStarted;
104103
private String currentLiteralName;
105104
private static final Logger LOG = LoggerFactory.getLogger(Metamorph.class);
106-
final private Pattern literalPatternOfEntityMarker = Pattern.compile(flattener.getEntityMarker(), Pattern.LITERAL);
105+
107106
protected Metamorph() {
108107
// package private
109108
init();
@@ -280,6 +279,7 @@ public void startEntity(final String name) {
280279
++entityCount;
281280
currentEntityCount = entityCount;
282281
entityCountStack.push(Integer.valueOf(entityCount));
282+
283283
flattener.startEntity(name);
284284
}
285285

@@ -316,11 +316,12 @@ public void closeStream() {
316316
}
317317

318318
private void dispatch(final String path, final String value, final List<NamedValueReceiver> fallbackReceiver, final boolean endEntity) {
319-
final List<NamedValueReceiver> matchingData = dataRegistry.get(path);
320-
if (matchingData != null && !matchingData.isEmpty()) {
319+
final List<NamedValueReceiver> matchingData = getData(path);
320+
321+
if (matchingData != null) {
321322
send(path, value, matchingData);
322323
}
323-
else if (fallbackReceiver != null && (literalPatternOfEntityMarker.split(path).length >0 && dataRegistry.get(literalPatternOfEntityMarker.split(path)[0]).isEmpty())) {
324+
else if (fallbackReceiver != null) {
324325
if (endEntity) {
325326
if (elseNestedEntityStarted) {
326327
outputStreamReceiver.endEntity();
@@ -331,11 +332,14 @@ else if (fallbackReceiver != null && (literalPatternOfEntityMarker.split(path).l
331332
final String entityName = elseNested ? flattener.getCurrentEntityName() : null;
332333

333334
if (entityName != null) {
334-
if (!elseNestedEntityStarted) {
335-
outputStreamReceiver.startEntity(entityName);
336-
elseNestedEntityStarted = true;
335+
if (getData(entityName) == null) {
336+
if (!elseNestedEntityStarted) {
337+
outputStreamReceiver.startEntity(entityName);
338+
elseNestedEntityStarted = true;
339+
}
340+
341+
send(currentLiteralName, value, fallbackReceiver);
337342
}
338-
send(currentLiteralName, value, fallbackReceiver);
339343
}
340344
else {
341345
send(path, value, fallbackReceiver);
@@ -344,6 +348,11 @@ else if (fallbackReceiver != null && (literalPatternOfEntityMarker.split(path).l
344348
}
345349
}
346350

351+
private List<NamedValueReceiver> getData(final String path) {
352+
final List<NamedValueReceiver> matchingData = dataRegistry.get(path);
353+
return matchingData != null && !matchingData.isEmpty() ? matchingData : null;
354+
}
355+
347356
private void send(final String path, final String value, final List<NamedValueReceiver> dataList) {
348357
for (final NamedValueReceiver data : dataList) {
349358
try {

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

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -294,8 +294,12 @@ public void shouldHandlePartiallyUnmatchedLiteralsAndEntitiesInElseNestedSource(
294294
i.endRecord();
295295
},
296296
(o, f) -> {
297+
// Pass-through coordinates with morph whether to start/end an entity
297298
final boolean coordinatesWithEntity = false;
299+
300+
// Pass-through and morph entities are separated (one ends when the other starts)
298301
final boolean separatesFromEntity = false;
302+
299303
o.get().startRecord("1");
300304
o.get().literal("Shikotan", "Aekap");
301305
o.get().startEntity("Germany");
@@ -308,65 +312,65 @@ public void shouldHandlePartiallyUnmatchedLiteralsAndEntitiesInElseNestedSource(
308312
o.get().startEntity("USA2");
309313
o.get().literal("Hawaii", "Aloha");
310314
if (!coordinatesWithEntity) {
311-
o.get().endEntity();
312-
o.get().startEntity("USA2");
315+
o.get().endEntity();
316+
o.get().startEntity("USA2");
313317
}
314318
o.get().literal("Langeoog", "Moin");
315319
o.get().literal("Baltrum", "Moin Moin");
316320
o.get().endEntity();
317321
o.get().startEntity("USA3");
318322
o.get().literal("Langeoog", "Moin");
319323
if (!coordinatesWithEntity) {
320-
o.get().startEntity("USA3");
324+
o.get().startEntity("USA3");
321325
}
322326
else if (separatesFromEntity) {
323-
o.get().endEntity();
324-
o.get().startEntity("USA3");
327+
o.get().endEntity();
328+
o.get().startEntity("USA3");
325329
}
326330
o.get().literal("Hawaii", "Aloha");
327331
if (!coordinatesWithEntity) {
328-
o.get().endEntity();
332+
o.get().endEntity();
329333
}
330334
else if (separatesFromEntity) {
331-
o.get().endEntity();
332-
o.get().startEntity("USA3");
335+
o.get().endEntity();
336+
o.get().startEntity("USA3");
333337
}
334338
o.get().literal("Baltrum", "Moin Moin");
335339
o.get().endEntity();
336340
o.get().startEntity("USA4");
337341
o.get().literal("Langeoog", "Moin");
338342
o.get().literal("Baltrum", "Moin Moin");
339343
if (!coordinatesWithEntity) {
340-
o.get().startEntity("USA4");
344+
o.get().startEntity("USA4");
341345
}
342346
else if (separatesFromEntity) {
343-
o.get().endEntity();
344-
o.get().startEntity("USA4");
347+
o.get().endEntity();
348+
o.get().startEntity("USA4");
345349
}
346350
o.get().literal("Hawaii", "Aloha");
347351
if (!coordinatesWithEntity) {
348-
f.apply(2).endEntity();
352+
f.apply(2).endEntity();
349353
}
350354
else {
351-
o.get().endEntity();
355+
o.get().endEntity();
352356
}
353357
o.get().endRecord();
354358
}
355359
);
356360
}
357361

358362
@Test
359-
public void shouldNotHandleDataByElseNestedSourceIfDataBelonginToEntityIsRuledByMorph() {
363+
public void shouldNotHandleDataByElseNestedSourceIfDataBelongingToEntityIsRuledByMorph() {
360364
assertMorph(receiver,
361365
"<rules>" +
362366
" <entity name='USA1'>" +
363367
" <data source='USA1.Sylt' name='Hawaii' />" +
364368
" </entity>" +
365-
" <entity name='USA2' sameEntity='true' reset='true' flushWith='USA2' flushIncomplete='true'>" +
369+
" <entity name='USA2' sameEntity='true' flushWith='USA2'>" +
366370
" <data source='USA2.Sylt' name='Hawaii' />" +
367371
" <data source='USA2.Langeoog' name='Langeoog' />" +
368372
" </entity>" +
369-
" <entity name='USA3' sameEntity='true' reset='true' flushWith='USA3' flushIncomplete='true'>" +
373+
" <entity name='USA3' sameEntity='true' flushWith='USA3'>" +
370374
" <data source='USA3.Sylt' name='Hawaii' />" +
371375
" </entity>" +
372376
" <data source='_elseNested' />" +
@@ -395,7 +399,7 @@ public void shouldNotHandleDataByElseNestedSourceIfDataBelonginToEntityIsRuledBy
395399
i.endEntity();
396400
i.endRecord();
397401
},
398-
(o, f) -> {
402+
o -> {
399403
o.get().startRecord("1");
400404
o.get().literal("Shikotan", "Aekap");
401405
o.get().startEntity("Germany");

0 commit comments

Comments
 (0)