\r
}\r
\r
+\r
+ public void replaceMeasData(List<MeasData> measDataList) {\r
+ this.measData = measDataList;\r
+ }\r
+\r
}\r
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * Copyright (C) 2019 Nordix Foundation.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * SPDX-License-Identifier: Apache-2.0\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.onap.dcaegen2.services.pmmapper.utils;\r
+\r
+import java.util.Arrays;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.stream.Collectors;\r
+\r
+import org.onap.dcaegen2.services.pmmapper.model.Event;\r
+import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;\r
+import org.onap.dcaegen2.services.pmmapper.model.MeasCollecFile;\r
+import org.onap.dcaegen2.services.pmmapper.model.MeasCollecFile.MeasData;\r
+import org.onap.logging.ref.slf4j.ONAPLogAdapter;\r
+import org.slf4j.LoggerFactory;\r
+\r
+import io.undertow.server.HttpServerExchange;\r
+\r
+/**\r
+ * Splits the MeasCollecFile based on MeasData.\r
+ **/\r
+public class MeasSplitter {\r
+ private static final ONAPLogAdapter logger = new ONAPLogAdapter(LoggerFactory.getLogger(MeasSplitter.class));\r
+ private MeasConverter converter;\r
+\r
+ public MeasSplitter(MeasConverter converter) {\r
+ this.converter = converter;\r
+ }\r
+\r
+ public List<Event> split(Event event) {\r
+ logger.unwrap().debug("Splitting 3GPP xml MeasData to MeasCollecFile");\r
+ MeasCollecFile currentMeasurement = converter.convert(event.getBody());\r
+\r
+ return currentMeasurement.getMeasData().stream().map( measData -> {\r
+ Event newEvent = generateNewEvent(event);\r
+ MeasCollecFile newMeasCollec = generateNewMeasCollec(newEvent,measData);\r
+ newEvent.setMeasCollecFile(newMeasCollec);\r
+ return newEvent;\r
+ }).collect(Collectors.toList());\r
+ }\r
+\r
+ private MeasCollecFile generateNewMeasCollec(Event event, MeasData measData) {\r
+ MeasCollecFile measCollec = new MeasCollecFile();\r
+ measCollec.replaceMeasData(Arrays.asList(measData));\r
+ measCollec.setFileHeader(event.getMeasCollecFile().getFileHeader());\r
+ measCollec.setFileFooter(event.getMeasCollecFile().getFileFooter());\r
+ return measCollec;\r
+ }\r
+\r
+ private Event generateNewEvent(Event event) {\r
+ Event modifiedEvent = new Event(event.getHttpServerExchange(),\r
+ event.getBody(), event.getMetadata(), event.getMdc(),\r
+ event.getPublishIdentity());\r
+ modifiedEvent.setMeasCollecFile(event.getMeasCollecFile());\r
+ return modifiedEvent;\r
+ }\r
+}\r
--- /dev/null
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * Copyright (C) 2019 Nordix Foundation.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ * SPDX-License-Identifier: Apache-2.0\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+package org.onap.dcaegen2.services.pmmapper.utils;\r
+import static org.junit.Assert.assertEquals;\r
+\r
+import java.nio.file.Paths;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+\r
+import javax.xml.bind.JAXBException;\r
+\r
+import org.junit.jupiter.api.Assertions;\r
+import org.junit.jupiter.api.BeforeEach;\r
+import org.junit.jupiter.api.Test;\r
+import org.junit.jupiter.api.extension.ExtendWith;\r
+import org.mockito.Mock;\r
+import org.mockito.Mockito;\r
+import org.mockito.junit.jupiter.MockitoExtension;\r
+import org.onap.dcaegen2.services.pmmapper.model.Event;\r
+import org.onap.dcaegen2.services.pmmapper.model.EventMetadata;\r
+import org.onap.dcaegen2.services.pmmapper.model.MeasCollecFile;\r
+\r
+import io.undertow.server.HttpServerExchange;\r
+import utils.EventUtils;\r
+\r
+@ExtendWith(MockitoExtension.class)\r
+public class MeasSplitterTest {\r
+ private static final String baseDir = "src/test/resources/split_test/";\r
+ private MeasSplitter objUnderTest;\r
+ private MeasConverter converter;\r
+ @Mock\r
+ HttpServerExchange exchange;\r
+ @Mock\r
+ EventMetadata meta;\r
+ @Mock\r
+ Event event;\r
+\r
+ @BeforeEach\r
+ public void setup() {\r
+ converter = new MeasConverter();\r
+ objUnderTest = new MeasSplitter(converter);\r
+ Mockito.when(event.getHttpServerExchange()).thenReturn(exchange);\r
+ Mockito.when(event.getMetadata()).thenReturn(meta);\r
+ Mockito.when(event.getMdc()).thenReturn(new HashMap<String, String>());\r
+ Mockito.when(event.getMetadata()).thenReturn(meta);\r
+ Mockito.when(event.getPublishIdentity()).thenReturn("");\r
+ }\r
+\r
+ @Test\r
+ public void typeA_returns_only_one_event() throws JAXBException {\r
+ String inputPath = baseDir + "meas_results_typeA";\r
+ String inputXml = EventUtils.fileContentsToString(Paths.get(inputPath + ".xml"));\r
+ MeasCollecFile measToBeSplit = converter.convert(inputXml);\r
+ Mockito.when(event.getBody()).thenReturn(inputXml);\r
+ Mockito.when(event.getMeasCollecFile()).thenReturn(measToBeSplit);\r
+\r
+ List<Event> splitEvents = objUnderTest.split(event);\r
+\r
+ assertEquals(1,splitEvents.size());\r
+ }\r
+\r
+ @Test\r
+ public void typeC_returns_multiple_events() throws JAXBException {\r
+ String inputPath = baseDir + "meas_results_typeC";\r
+ String inputXml = EventUtils.fileContentsToString(Paths.get(inputPath + ".xml"));\r
+ Mockito.when(event.getBody()).thenReturn(inputXml);\r
+ MeasCollecFile measToBeSplit = converter.convert(inputXml);\r
+ Mockito.when(event.getMeasCollecFile()).thenReturn(measToBeSplit);\r
+\r
+ List<Event> splitEvents = objUnderTest.split(event);\r
+\r
+ assertEquals(3,splitEvents.size());\r
+ for (int i = 0; i < splitEvents.size(); i++) {\r
+ String measInfoId = splitEvents.get(i).getMeasCollecFile()\r
+ .getMeasData().get(0).getMeasInfo().get(0).getMeasInfoId();\r
+ Assertions.assertTrue(measInfoId.equals("measInfoId"+(i+1)));\r
+ }\r
+ }\r
+}\r
--- /dev/null
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader dnPrefix="some dnPrefix" vendorName="FooBar Ltd"
+ fileFormatVersion="32.435 V10.0">
+ <fileSender localDn="Dublin"/>
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement swVersion="r0.1" localDn="Dublin"/>
+ <measInfo measInfoId="some measInfoId">
+ <job jobId="jobId"/>
+ <granPeriod endTime="2018-10-02T12:15:00Z" duration="PT900S"/>
+ <repPeriod duration="PT900S"/>
+ <measTypes>z a zz b</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>99 1 27 2</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>
+ </fileFooter>
+</measCollecFile>
--- /dev/null
+<measCollecFile xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec">
+ <fileHeader dnPrefix="some dnPrefix" vendorName="FooBar Ltd"
+ fileFormatVersion="32.435 V10.0">
+ <fileSender localDn="Dublin"/>
+ <measCollec beginTime="2018-10-02T12:00:00+01:00"/>
+ </fileHeader>
+ <measData>
+ <managedElement swVersion="r0.1" localDn="Dublin1"/>
+ <measInfo measInfoId="measInfoId1">
+ <job jobId="jobId1"/>
+ <granPeriod endTime="2001-10-02T12:15:00Z" duration="PT100S"/>
+ <repPeriod duration="PT100S"/>
+ <measTypes>z1 a1 zz1 b1</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>1 11 111 1111</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <measData>
+ <managedElement swVersion="r0.2" localDn="Dublin2"/>
+ <measInfo measInfoId="measInfoId2">
+ <job jobId="jobId"/>
+ <granPeriod endTime="2002-10-02T12:15:00Z" duration="PT200S"/>
+ <repPeriod duration="PT200S"/>
+ <measTypes>z2 a2 zz2 b2</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>2 22 222 2222</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <measData>
+ <managedElement swVersion="r0.3" localDn="Dublin3"/>
+ <measInfo measInfoId="measInfoId3">
+ <job jobId="jobId"/>
+ <granPeriod endTime="2003-10-02T12:15:00Z" duration="PT300S"/>
+ <repPeriod duration="PT300S"/>
+ <measTypes>z3 a3 zz3 b3</measTypes>
+ <measValue measObjLdn="objLdn">
+ <measResults>3 33 333 3333</measResults>
+ <suspect>false</suspect>
+ </measValue>
+ </measInfo>
+ </measData>
+ <fileFooter>
+ <measCollec endTime="2018-10-02T12:15:00+01:00"/>
+ </fileFooter>
+</measCollecFile>