diff options
5 files changed, 112 insertions, 19 deletions
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<MeasInfo> filteredMeasInfos, Filter filter) { - MeasValue currentMeasValue = currentMeasInfo.getMeasValue() - .get(0); - List<R> measResultsRNodes = currentMeasValue.getR(); - Map<BigInteger, R> mappedR = measResultsRNodes.stream() - .collect(Collectors.toMap(R::getP, Function.identity())); - List<R> filteredRs = new ArrayList<>(); - List<MeasType> filteredMeasTypes = currentMeasInfo.getMeasType() - .stream().filter(mt -> { - List<String> measTypeFilters = filter.getMeasTypes(); - if (measTypeFilters.contains(mt.getValue())) { - filteredRs.add(mappedR.get(mt.getP())); - return true; - } - return false; - }) + private boolean hasMatchingResults(List<MeasType> filteredMeasTypes, MeasValue measValue ) { + List<R> 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<MeasInfo> filteredMeasInfos, Filter filter) { + List<MeasType> filteredMeasTypes = currentMeasInfo.getMeasType().stream() + .filter(mt -> filter.getMeasTypes().contains(mt.getValue())) .collect(Collectors.toList()); - if (!filteredMeasTypes.isEmpty()) { + + if(!filteredMeasTypes.isEmpty()) { + List<MeasValue> 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<MeasInfo> 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<MeasValue> 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 @@ -183,6 +183,20 @@ class MeasFilterHandlerTest { } @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); when(event.getHttpServerExchange()).thenReturn(exchange); 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 @@ +<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader fileFormatVersion="32.435 V10.0" vendorName="FooBar Ltd" dnPrefix="some dnPrefix">
+ <fileSender localDn="Dublin"/>
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement localDn="Dublin" swVersion="r0.1"/>
+ <measInfo measInfoId="some measInfoId">
+ <job jobId="jobId"/>
+ <granPeriod duration="PT900S" endTime="2018-10-02T12:15:00Z"/>
+ <repPeriod duration="PT900S"/>
+ <measTypes></measTypes>
+ <measType p="1">a</measType>
+ <measType p="2">b</measType>
+ <measType p="3">c</measType>
+ <measValue measObjLdn="some measObjLdn 1">
+ <r p="1">1</r>
+ <r p="2">2</r>
+ <suspect>false</suspect>
+ </measValue>
+ <measValue measObjLdn="some measObjLdn 2">
+ <r p="88">88</r>
+ <r p="99">99</r>
+ <suspect>false</suspect>
+ </measValue>
+ <measValue measObjLdn="some measObjLdn 3">
+ <r p="1">111</r>
+ <r p="2">222</r>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>
+ </fileFooter>
+</measCollecFile>
\ 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 @@ +<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader fileFormatVersion="32.435 V10.0" vendorName="FooBar Ltd" dnPrefix="some dnPrefix">
+ <fileSender localDn="Dublin"/>
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement localDn="Dublin" swVersion="r0.1"/>
+ <measInfo measInfoId="some measInfoId">
+ <job jobId="jobId"/>
+ <granPeriod duration="PT900S" endTime="2018-10-02T12:15:00Z"/>
+ <repPeriod duration="PT900S"/>
+ <measTypes></measTypes>
+ <measType p="1">a</measType>
+ <measType p="2">b</measType>
+ <measValue measObjLdn="some measObjLdn 1">
+ <r p="1">1</r>
+ <r p="2">2</r>
+ <suspect>false</suspect>
+ </measValue>
+ <measValue measObjLdn="some measObjLdn 3">
+ <r p="1">111</r>
+ <r p="2">222</r>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>
+ </fileFooter>
+</measCollecFile>
\ No newline at end of file |