DCAE-D be initial commit
[sdc/dcae-d/dt-be-main.git] / dcaedt_be / src / main / java / org / onap / sdc / dcae / rule / editor / translators / ConditionGroupTranslator.java
1 package org.onap.sdc.dcae.rule.editor.translators;
2
3 import org.onap.sdc.dcae.composition.restmodels.ruleeditor.*;
4 import org.onap.sdc.dcae.rule.editor.enums.ConditionTypeEnum;
5 import org.onap.sdc.dcae.rule.editor.enums.OperatorTypeEnum;
6 import org.onap.sdc.dcae.rule.editor.utils.ValidationUtils;
7
8 import java.util.List;
9 import java.util.Map;
10 import java.util.stream.Collectors;
11
12 public class ConditionGroupTranslator implements IRuleElementTranslator<ConditionGroup> {
13
14         private static ConditionGroupTranslator conditionGroupTranslator = new ConditionGroupTranslator();
15
16         public static ConditionGroupTranslator getInstance() {
17                 return conditionGroupTranslator;
18         }
19
20         private ConditionGroupTranslator(){}
21
22         public Translation translateToHpJson(ConditionGroup conditionGroup) {
23                 String clazz = ConditionTypeEnum.getTypeByName(conditionGroup.getType()).getFilterClass();
24                 FiltersTranslation translation = new FiltersTranslation(clazz, conditionGroup.getChildren().stream()
25                                 .map(this::getTranslation)
26                                 .collect(Collectors.toList()));
27                 flattenNestedFilters(translation, clazz);
28                 return translation;
29         }
30
31
32         private IRuleElementTranslator getConditionTranslator(BaseCondition condition){
33                 return condition instanceof ConditionGroup ? ConditionGroupTranslator.getInstance() :
34                                 ValidationUtils.validateNotEmpty(OperatorTypeEnum.getTypeByName(((Condition)condition).getOperator()).getModifiedType()) ? FieldConditionTranslator.getInstance() : ConditionTranslator.getInstance();
35         }
36
37         private Translation getTranslation(BaseCondition condition) {
38                 return getConditionTranslator(condition).translateToHpJson(condition);
39         }
40
41         private void flattenNestedFilters(FiltersTranslation filtersTranslation, String clazz) {
42                 Map<Boolean, List<Translation>> partitioned = filtersTranslation.filters.stream().collect(Collectors.partitioningBy(f -> clazz.equals(((ProcessorTranslation) f).clazz)));
43                 filtersTranslation.filters.removeAll(partitioned.get(Boolean.TRUE));
44                 filtersTranslation.filters.addAll(partitioned.get(Boolean.TRUE).stream().map(f -> ((FiltersTranslation) f).filters).flatMap(List::stream).collect(Collectors.toList()));
45         }
46
47 }