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;
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) {
this.measType = filteredMeasTypes;\r
}\r
\r
+ public void replaceMeasValue(List<MeasValue> filteredMeasValues) {\r
+ this.measValue = filteredMeasValues;\r
+ }\r
+\r
}\r
\r
\r
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);
--- /dev/null
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">\r
+ <fileHeader fileFormatVersion="32.435 V10.0" vendorName="FooBar Ltd" dnPrefix="some dnPrefix">\r
+ <fileSender localDn="Dublin"/>\r
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>\r
+ </fileHeader>\r
+ <measData>\r
+ <managedElement localDn="Dublin" swVersion="r0.1"/>\r
+ <measInfo measInfoId="some measInfoId">\r
+ <job jobId="jobId"/>\r
+ <granPeriod duration="PT900S" endTime="2018-10-02T12:15:00Z"/>\r
+ <repPeriod duration="PT900S"/>\r
+ <measTypes></measTypes>\r
+ <measType p="1">a</measType>\r
+ <measType p="2">b</measType>\r
+ <measType p="3">c</measType>\r
+ <measValue measObjLdn="some measObjLdn 1">\r
+ <r p="1">1</r>\r
+ <r p="2">2</r>\r
+ <suspect>false</suspect>\r
+ </measValue>\r
+ <measValue measObjLdn="some measObjLdn 2">\r
+ <r p="88">88</r>\r
+ <r p="99">99</r>\r
+ <suspect>false</suspect>\r
+ </measValue>\r
+ <measValue measObjLdn="some measObjLdn 3">\r
+ <r p="1">111</r>\r
+ <r p="2">222</r>\r
+ <suspect>false</suspect>\r
+ </measValue>\r
+ </measInfo>\r
+ </measData>\r
+ <fileFooter>\r
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>\r
+ </fileFooter>\r
+</measCollecFile>
\ No newline at end of file
--- /dev/null
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">\r
+ <fileHeader fileFormatVersion="32.435 V10.0" vendorName="FooBar Ltd" dnPrefix="some dnPrefix">\r
+ <fileSender localDn="Dublin"/>\r
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>\r
+ </fileHeader>\r
+ <measData>\r
+ <managedElement localDn="Dublin" swVersion="r0.1"/>\r
+ <measInfo measInfoId="some measInfoId">\r
+ <job jobId="jobId"/>\r
+ <granPeriod duration="PT900S" endTime="2018-10-02T12:15:00Z"/>\r
+ <repPeriod duration="PT900S"/>\r
+ <measTypes></measTypes>\r
+ <measType p="1">a</measType>\r
+ <measType p="2">b</measType>\r
+ <measValue measObjLdn="some measObjLdn 1">\r
+ <r p="1">1</r>\r
+ <r p="2">2</r>\r
+ <suspect>false</suspect>\r
+ </measValue>\r
+ <measValue measObjLdn="some measObjLdn 3">\r
+ <r p="1">111</r>\r
+ <r p="2">222</r>\r
+ <suspect>false</suspect>\r
+ </measValue>\r
+ </measInfo>\r
+ </measData>\r
+ <fileFooter>\r
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>\r
+ </fileFooter>\r
+</measCollecFile>
\ No newline at end of file