Split typeC XML to multiple Type A 86/79786/3
authoremartin <ephraim.martin@est.tech>
Wed, 13 Mar 2019 18:09:21 +0000 (18:09 +0000)
committeremartin <ephraim.martin@est.tech>
Wed, 13 Mar 2019 18:09:21 +0000 (18:09 +0000)
*Split TypeC MeasFile to multiple TypeA by MeasData
*Create new Event for each TypeA

Change-Id: I22eb22c663c8491f3cae5e39e583ee2660647743
Issue-ID: DCAEGEN2-1281
Signed-off-by: emartin <ephraim.martin@est.tech>
src/main/java/org/onap/dcaegen2/services/pmmapper/model/MeasCollecFile.java
src/main/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitter.java [new file with mode: 0644]
src/test/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitterTest.java [new file with mode: 0644]
src/test/resources/split_test/meas_results_typeA.xml [new file with mode: 0644]
src/test/resources/split_test/meas_results_typeC.xml [new file with mode: 0644]

index 572b46b..613fe63 100644 (file)
@@ -1841,4 +1841,9 @@ public class MeasCollecFile {
 \r
     }\r
 \r
+\r
+    public void replaceMeasData(List<MeasData> measDataList) {\r
+        this.measData = measDataList;\r
+    }\r
+\r
 }\r
diff --git a/src/main/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitter.java b/src/main/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitter.java
new file mode 100644 (file)
index 0000000..009e454
--- /dev/null
@@ -0,0 +1,75 @@
+/*-\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
diff --git a/src/test/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitterTest.java b/src/test/java/org/onap/dcaegen2/services/pmmapper/utils/MeasSplitterTest.java
new file mode 100644 (file)
index 0000000..962303c
--- /dev/null
@@ -0,0 +1,96 @@
+/*-\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
diff --git a/src/test/resources/split_test/meas_results_typeA.xml b/src/test/resources/split_test/meas_results_typeA.xml
new file mode 100644 (file)
index 0000000..bc87b79
--- /dev/null
@@ -0,0 +1,23 @@
+<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>
diff --git a/src/test/resources/split_test/meas_results_typeC.xml b/src/test/resources/split_test/meas_results_typeC.xml
new file mode 100644 (file)
index 0000000..b6a3b43
--- /dev/null
@@ -0,0 +1,49 @@
+<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>