From: emartin Date: Fri, 5 Apr 2019 16:43:46 +0000 (+0000) Subject: Fix issue with filtering multiple measValue X-Git-Tag: 1.0.0~3^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=ccdc2ae3ddbaf63164ddd9ae4af2274944cb2c4c;p=dcaegen2%2Fservices%2Fpm-mapper.git Fix issue with filtering multiple measValue Change-Id: I8f81510445edf276561645bdd4549a8c18207b57 Issue-ID: DCAEGEN2-1327 Signed-off-by: emartin --- diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java index 6896d3c..2dc4ae9 100644 --- a/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandler.java @@ -22,6 +22,8 @@ package org.onap.dcaegen2.services.pmmapper.filtering; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -151,29 +153,36 @@ public class MeasFilterHandler { return FilenameUtils.getExtension(fileName).equals(XML_EXTENSION); } - private void setMeasInfoFromMeasType(MeasInfo currentMeasInfo, List filteredMeasInfos, Filter filter) { - MeasValue currentMeasValue = currentMeasInfo.getMeasValue() - .get(0); - List measResultsRNodes = currentMeasValue.getR(); - Map mappedR = measResultsRNodes.stream() - .collect(Collectors.toMap(R::getP, Function.identity())); - List filteredRs = new ArrayList<>(); - List filteredMeasTypes = currentMeasInfo.getMeasType() - .stream().filter(mt -> { - List measTypeFilters = filter.getMeasTypes(); - if (measTypeFilters.contains(mt.getValue())) { - filteredRs.add(mappedR.get(mt.getP())); - return true; - } - return false; - }) + private boolean hasMatchingResults(List filteredMeasTypes, MeasValue measValue ) { + List filteredResults = new ArrayList<>(); + + filteredMeasTypes.forEach( mst -> + measValue.getR().stream() + .filter(r -> mst.getP().equals(r.getP())) + .findFirst() + .ifPresent(filteredResults::add) + ); + + boolean hasResults = !filteredResults.isEmpty(); + if(hasResults) { + measValue.replaceR(filteredResults); + } + return hasResults; + } + + private void setMeasInfoFromMeasType(MeasInfo currentMeasInfo, List filteredMeasInfos, Filter filter) { + List filteredMeasTypes = currentMeasInfo.getMeasType().stream() + .filter(mt -> filter.getMeasTypes().contains(mt.getValue())) .collect(Collectors.toList()); - if (!filteredMeasTypes.isEmpty()) { + + if(!filteredMeasTypes.isEmpty()) { + List filteredMeasValues = currentMeasInfo.getMeasValue().stream() + .filter( mv -> hasMatchingResults(filteredMeasTypes, mv)) + .collect(Collectors.toList()); currentMeasInfo.replaceMeasType(filteredMeasTypes); - currentMeasValue.replaceR(filteredRs); + currentMeasInfo.replaceMeasValue(filteredMeasValues); filteredMeasInfos.add(currentMeasInfo); } - } private void setMeasInfosFromMeasTypes(MeasInfo currentMeasInfo, List filteredMeasInfos, Filter filter) { diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/model/MeasCollecFile.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/model/MeasCollecFile.java index 613fe63..6e9e254 100644 --- a/src/main/java/org/onap/dcaegen2/services/pmmapper/model/MeasCollecFile.java +++ b/src/main/java/org/onap/dcaegen2/services/pmmapper/model/MeasCollecFile.java @@ -1832,6 +1832,10 @@ public class MeasCollecFile { this.measType = filteredMeasTypes; } + public void replaceMeasValue(List filteredMeasValues) { + this.measValue = filteredMeasValues; + } + } diff --git a/src/test/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandlerTest.java b/src/test/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandlerTest.java index 694b4e9..031a3c8 100644 --- a/src/test/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandlerTest.java +++ b/src/test/java/org/onap/dcaegen2/services/pmmapper/filtering/MeasFilterHandlerTest.java @@ -182,6 +182,20 @@ class MeasFilterHandlerTest { assertEquals(expected, actual); } + @Test + void multiple_measValues() { + String inputPath = baseDir + "meas_type_and_r_manyMeasvalue"; + String filteredString = EventUtils.fileContentsToString(Paths.get(inputPath + "_filtered.xml")); + Event event = generateEvent(inputPath, generateValidFilter()); + + MeasCollecFile f = converter.convert(filteredString); + String expected = converter.convert(f); + objUnderTest.filterByMeasType(event); + + String actual = converter.convert(event.getMeasCollecFile()); + assertEquals(expected, actual); + } + @Test void valid_fileType() { Event event = mock(Event.class); diff --git a/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue.xml b/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue.xml new file mode 100644 index 0000000..691882c --- /dev/null +++ b/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + a + b + c + + 1 + 2 + false + + + 88 + 99 + false + + + 111 + 222 + false + + + + + + + \ No newline at end of file diff --git a/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue_filtered.xml b/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue_filtered.xml new file mode 100644 index 0000000..9f185a4 --- /dev/null +++ b/src/test/resources/filter_test/meas_type_and_r_manyMeasvalue_filtered.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + a + b + + 1 + 2 + false + + + 111 + 222 + false + + + + + + + \ No newline at end of file