Merge "Platform/DG logic support for CMNotify"
diff --git a/odlsli/odlsli-alpine/src/main/properties/sdnr-CMNotify-api-dg.properties.properties b/odlsli/odlsli-alpine/src/main/properties/sdnr-CMNotify-api-dg.properties.properties
new file mode 100644
index 0000000..8fa3735
--- /dev/null
+++ b/odlsli/odlsli-alpine/src/main/properties/sdnr-CMNotify-api-dg.properties.properties
@@ -0,0 +1,36 @@
+restapi.templateDir=/opt/onap/ccsdk/restapi/templates
+controller.url=http://sdnc.onap:8282
+controller.user=admin
+controller.pwd=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+ransim-mounted=false
+
+restapi.trustStoreFileName=/opt/onap/sdnc/data/stores/truststore.openecomp.client.jks
+restapi.trustStorePassword=adminadmin
+restapi.keyStoreFileName=/opt/onap/sdnc/data/stores/sdnc.p12
+restapi.keyStorePassword=adminadmin
+restapi.connection-oof-url=http://oof.api.simpledemo.onap.org:8698/api/oof/v1/route
+naming.gen-name.url=http://neng-serv:8080
+naming.gen-name.user=ccsdkapps
+naming.gen-name.pwd=ccsdkapps
+
+
+# Templates
+restapi.pci-patch.templatefile=CMNotify-pci-patch.json
+restapi.neighbor-add.templatefile=CMNotify-addNeighbor.json
+restapi.neighbor-delete.templatefile=CMNotify-deleteNeighbor.json
+restapi.generic-neighbor-patch.template=CMNotify-generic-neighbor-patch.json
+restapi.add-nbr-to-configdb-per-notif.template=CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json
+restapi.dmaap-publish.template=CMNotify-dmaap-publish-template.json
+
+#URLs for ConfigDB
+restapi.configdb.add-nbrlist-change-per-notif=/createNbr/{cellId}
+configdb.url=http://10.12.6.45:8080/api/sdnc-config-db/v3
+
+#DMAAP Publish
+dmaap-message-router.url=message-router.onap:3904/events
+CMNotify-dmaap.nbrlist-change.topic=/CM-NOTIFICATION-RSP
+
+CMNotify-dmaap.requestID=9d2d790e-a5f0-11e8-98d0-529269fb1459
+CMNotify-dmaap.aai=
+CMNotify-dmaap.version=1.0.2
+CMNotify-dmaap.nbrlistchange.action=NeighborListModified
diff --git a/platform-logic/cMNotify-api/pom.xml b/platform-logic/cMNotify-api/pom.xml
new file mode 100644
index 0000000..426e4ba
--- /dev/null
+++ b/platform-logic/cMNotify-api/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.onap.ccsdk.distribution</groupId>
+		<artifactId>distribution-platform-logic</artifactId>
+		<version>0.7.1-SNAPSHOT</version>
+	</parent>
+
+	<artifactId>platform-logic-cMNotifyai</artifactId>
+	<version>0.7.1-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<name>ccsdk-distribution :: platform-logic :: ${project.artifactId}</name>
+	<description>Contains platform-level service logic for responding to ORAN VES events</description>
+
+	<build>
+		<plugins>
+			<plugin>
+				<artifactId>maven-resources-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<id>copy-version</id>
+						<goals>
+							<goal>copy-resources</goal>
+						</goals><!-- here the phase you need -->
+						<phase>validate</phase>
+						<configuration>
+							<outputDirectory>../target/graphs/cMNotifyapi</outputDirectory>
+							<resources>
+								<resource>
+									<directory>src/main/xml</directory>
+									<includes>
+										<include>*.xml</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+								<resource>
+									<directory>src/main/resources</directory>
+									<includes>
+										<include>graph.versions</include>
+									</includes>
+									<filtering>true</filtering>
+								</resource>
+							</resources>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/platform-logic/cMNotify-api/src/main/json/CM-NOTIFY-API_nbrlist-change-notification.json b/platform-logic/cMNotify-api/src/main/json/CM-NOTIFY-API_nbrlist-change-notification.json
new file mode 100644
index 0000000..1438b5d
--- /dev/null
+++ b/platform-logic/cMNotify-api/src/main/json/CM-NOTIFY-API_nbrlist-change-notification.json
@@ -0,0 +1,590 @@
+[
+    {
+        "id": "d7426cda.853c3",
+        "type": "method",
+        "name": "method",
+        "xml": "<method rpc='nbrlist-change-notification' mode='sync'>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 139,
+        "y": 192.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "e01172f2.eb605"
+            ]
+        ]
+    },
+    {
+        "id": "384d1619.9cd7ea",
+        "type": "dgstart",
+        "name": "DGSTART",
+        "outputs": 1,
+        "x": 142,
+        "y": 42,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "a139909c.cc021"
+            ]
+        ]
+    },
+    {
+        "id": "a139909c.cc021",
+        "type": "service-logic",
+        "name": "CM-NOTIFY-API ${project.version}",
+        "module": "CM-NOTIFY-API",
+        "version": "${project.version}",
+        "comments": "",
+        "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='CM-NOTIFY-API' version='${project.version}'>",
+        "outputs": 1,
+        "x": 199.99998474121094,
+        "y": 103.00009536743164,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "d7426cda.853c3"
+            ]
+        ]
+    },
+    {
+        "id": "e01172f2.eb605",
+        "type": "block",
+        "name": "block : atomic",
+        "xml": "<block atomic='true'>",
+        "atomic": "true",
+        "comments": "",
+        "outputs": 1,
+        "x": 161.48959732055664,
+        "y": 361.0000343322754,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "ce9ff91f.9fd7b8",
+                "8f754eb6.4c563",
+                "12096927.430627",
+                "1c34cf50.e940a1",
+                "681abe9f.71ebb",
+                "cacad6a.74e6028"
+            ]
+        ]
+    },
+    {
+        "id": "ce9ff91f.9fd7b8",
+        "type": "returnSuccess",
+        "name": "return success",
+        "xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"SUCCESSFUL Execution\" />\n",
+        "comments": "",
+        "x": 258.0002670288086,
+        "y": 591.000186920166,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "46b206d1.328288",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"Input RPC Payload request. FAP #:  \"/>\n<parameter name=\"field2\" value=\"`$idx`\"/>\n<parameter name=\"field3\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].alias`\"/>\n<parameter name=\"field4\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].cid`\"/>\n<parameter name=\"field5\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].phy-cell-id-in-use`\"/>\n<parameter name=\"field6\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].pnf-name`\"/>\n<parameter name=\"field7\" value=\"Number of neigbors Changed/To Be Added #:  \"/>\n<parameter name=\"field8\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`\"/>",
+        "comments": "",
+        "outputs": 1,
+        "x": 826.0005493164062,
+        "y": 58.00004959106445,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "c791a89f.b094f8",
+        "type": "comment",
+        "name": "CMNotify VES: nbrlist-change-notification",
+        "info": "",
+        "comments": "",
+        "x": 424,
+        "y": 35.010414123535156,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "12096927.430627",
+        "type": "for",
+        "name": "for",
+        "xml": "<for index='idx' start='0' end=\"`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`\" >",
+        "comments": "",
+        "outputs": 1,
+        "x": 495.085693359375,
+        "y": 130.9635887145996,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "c2a6556d.4d96f8"
+            ]
+        ]
+    },
+    {
+        "id": "8f754eb6.4c563",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"RPC to handle VES event: nbrlist change notification invoked. Number of FAP services for which neighbors have changed:  \"/>\n<parameter name=\"field2\" value=\"`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`\"/>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 311.0002975463867,
+        "y": 170.02084732055664,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "3b43614d.42cd1e",
+        "type": "set",
+        "name": "set tmp variables for notif input parms",
+        "xml": "<set>\n<parameter name=\"tmp.alias\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].alias`\"/>\n<parameter name=\"tmp.cid\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].cid`\"/>\n<parameter name=\"tmp.phy-cell-id-in-use\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].phy-cell-id-in-use`\"/>\n<parameter name=\"tmp.pnf-name\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].pnf-name`\"/>\n<parameter name=\"tmp.lte-cell-number-of-entries\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`\"/>",
+        "comments": "",
+        "x": 781.0010986328125,
+        "y": 225.89947891235352,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "1c34cf50.e940a1",
+        "type": "execute",
+        "name": "execute Properties",
+        "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n    <parameter name='fileName' value='/opt/onap/ccsdk/data/properties/sdnr-CMNotify-api-dg.properties' />\n    <parameter name='contextPrefix' value='prop' />\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 506.00018310546875,
+        "y": 191.02083206176758,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "681abe9f.71ebb",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"Properties read ..configDB URL\"/>\n<parameter name=\"field2\" value=\"`$prop.configdb.url`\"/>\n<parameter name=\"field3\" value=\"Properties read ..DMAAP Msg Router URL\"/>\n<parameter name=\"field4\" value=\"`$prop.configdb.url`\"/>\n<parameter name=\"field5\" value=\"`$prop.dmaap-message-router.url`\"/>\n<parameter name=\"field6\" value=\"`$prop.controller.pwd`\"/>\n<parameter name=\"field7\" value=\"`$prop.controller.url`\"/>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 471.00030517578125,
+        "y": 245.0209083557129,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "c2a6556d.4d96f8",
+        "type": "block",
+        "name": "block : atomic",
+        "xml": "<block atomic='true'>",
+        "atomic": "true",
+        "comments": "",
+        "outputs": 1,
+        "x": 647,
+        "y": 93.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "46b206d1.328288",
+                "dd208eef.5b405"
+            ]
+        ]
+    },
+    {
+        "id": "dd208eef.5b405",
+        "type": "for",
+        "name": "for",
+        "xml": "<for index='idy' start='0' end=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`\" >",
+        "comments": "",
+        "outputs": 1,
+        "x": 819,
+        "y": 123.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "654cb6f6.2f7848"
+            ]
+        ]
+    },
+    {
+        "id": "654cb6f6.2f7848",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"Neighbor #:  \"/>\n<parameter name=\"field2\" value=\"`$idy`\"/>\n<parameter name=\"field3\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].plmnid`\"/>\n<parameter name=\"field4\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].cid`\"/>\n<parameter name=\"field5\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].phy-cell-id`\"/>\n<parameter name=\"field6\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].pnf-name`\"/>\n<parameter name=\"field7\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].blacklisted`\"/>",
+        "comments": "",
+        "outputs": 1,
+        "x": 970,
+        "y": 117.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "cacad6a.74e6028",
+        "type": "for",
+        "name": "for",
+        "xml": "<for index='idx' start='0' end=\"`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`\" >",
+        "comments": "",
+        "outputs": 1,
+        "x": 346,
+        "y": 371,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "23ccad8.b78ea52"
+            ]
+        ]
+    },
+    {
+        "id": "23ccad8.b78ea52",
+        "type": "block",
+        "name": "block : ConfigDB Update",
+        "xml": "<block atomic='true'>",
+        "atomic": "true",
+        "comments": "",
+        "outputs": 1,
+        "x": 525,
+        "y": 362.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "3b43614d.42cd1e",
+                "7a2468e9.edebc8"
+            ]
+        ]
+    },
+    {
+        "id": "7a2468e9.edebc8",
+        "type": "for",
+        "name": "for",
+        "xml": "<for index='idy' start='0' end=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`\" >",
+        "comments": "",
+        "outputs": 1,
+        "x": 742,
+        "y": 336.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "8e06e48c.36b168"
+            ]
+        ]
+    },
+    {
+        "id": "b1c0b593.fe96b8",
+        "type": "set",
+        "name": "set tmp variables for notif neigbor input parms",
+        "xml": "<set>\n<parameter name=\"tmp.nbr.plmnid\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].plmnid`\"/>\n<parameter name=\"tmp.nbr.cid\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].cid`\"/>\n<parameter name=\"tmp.nbr.phy-cell-id\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].phy-cell-id`\"/>\n<parameter name=\"tmp.nbr.pnf-name\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].pnf-name`\"/>\n<parameter name=\"tmp.nbr.blacklisted\" value=\"`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].blacklisted`\"/>",
+        "comments": "",
+        "x": 1140,
+        "y": 210.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "8e06e48c.36b168",
+        "type": "block",
+        "name": "block : atomic",
+        "xml": "<block atomic='true'>",
+        "atomic": "true",
+        "comments": "",
+        "outputs": 1,
+        "x": 875,
+        "y": 284.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "b1c0b593.fe96b8",
+                "c91fd3ed.ea1a9",
+                "8ff49992.4b25f8",
+                "30d460ed.4d3f2"
+            ]
+        ]
+    },
+    {
+        "id": "c91fd3ed.ea1a9",
+        "type": "execute",
+        "name": "generate configdb add URL for nbr",
+        "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n    <parameter name=\"source\" value=\"`$prop.restapi.configdb.add-nbrlist-change-per-notif`\"/>\n    <parameter name=\"outputPath\" value=\"tmp.configdb.add-nbrlist-change-per-notif.url\"/>\n    <parameter name=\"target\" value=\"{cellId}\"/>\n    <parameter name=\"replacement\" value=\"`$tmp.cid`\"/>",
+        "comments": "",
+        "outputs": 1,
+        "x": 1138,
+        "y": 256.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "8ff49992.4b25f8",
+        "type": "record",
+        "name": "record configdb RestAPI parms",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/handle-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"URL for configDB neighbor cell ADD\"/>\n<parameter name='field2' value=\"`$prop.configdb.url + $tmp.configdb.add-nbrlist-change-per-notif.url`\" />\n<parameter name='field3' value=\"`$tmp.nbr.cid`\" />\n<parameter name='field4' value=\"`$tmp.nbr.blacklisted`\" />\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 1133,
+        "y": 305.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "30d460ed.4d3f2",
+        "type": "execute",
+        "name": "Add neighbor to Cell",
+        "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n<parameter name=\"templateFileName\" value=\"`$prop.restapi.templateDir + '/CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json'`\" />\n<parameter name=\"restapiUrl\" value=\"`$prop.configdb.url + $tmp.configdb.add-nbrlist-change-per-notif.url`\"/>\n<parameter name=\"httpMethod\" value=\"PUT\"/>\n<parameter name=\"responsePrefix\" value=\"CMNotify-configdb-response\"/>\n<parameter name='contentType' value='application/json' /> \n<parameter name='format' value='json' />\n<parameter name='accept' value='application/json' />",
+        "comments": "",
+        "outputs": 1,
+        "x": 1104,
+        "y": 383.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "bef59603.eb6c28",
+                "82674e19.0b984"
+            ]
+        ]
+    },
+    {
+        "id": "bef59603.eb6c28",
+        "type": "failure",
+        "name": "failure",
+        "xml": "<outcome value='failure'>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 1306,
+        "y": 350.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "2af0bc2d.9a03f4"
+            ]
+        ]
+    },
+    {
+        "id": "82674e19.0b984",
+        "type": "success",
+        "name": "success",
+        "xml": "<outcome value='success'>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 1298.999891281128,
+        "y": 428.9999132156372,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "9972d4be.cec088"
+            ]
+        ]
+    },
+    {
+        "id": "2af0bc2d.9a03f4",
+        "type": "block",
+        "name": "block",
+        "xml": "<block>\n",
+        "atomic": "false",
+        "comments": "",
+        "outputs": 1,
+        "x": 1466.9998779296875,
+        "y": 307.0000343322754,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "9186101c.ebef7"
+            ]
+        ]
+    },
+    {
+        "id": "9186101c.ebef7",
+        "type": "returnFailure",
+        "name": "return failure",
+        "xml": "<return status='failure'>\n<parameter name='ack-final' value='Y'/>\n<parameter name=\"error-code\" value=\"500\" />\n<parameter name=\"error-message\" value=\"Error adding neighbor to configdb. Aborting notification update\" />",
+        "comments": "",
+        "x": 1645.999568939209,
+        "y": 304.00000190734863,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "9972d4be.cec088",
+        "type": "block",
+        "name": "block",
+        "xml": "<block>\n",
+        "atomic": "false",
+        "comments": "",
+        "outputs": 1,
+        "x": 1456.9996337890625,
+        "y": 394.99997329711914,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "400b8692.be8148"
+            ]
+        ]
+    },
+    {
+        "id": "400b8692.be8148",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"Neighbor Added to ConfigDB \"/>",
+        "comments": "",
+        "outputs": 1,
+        "x": 1635.9997024536133,
+        "y": 393.9999599456787,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "9491fd51.6d973",
+        "type": "execute",
+        "name": "execute DmaapMsg",
+        "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n    <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.dmaap-publish.templatefile`\" />\n    <parameter name='restapiUrl' value=\"`$prop.dmaap-message-router.url + '/' + $prop.CMNotify-dmaap.nbrlist-change.topic`\" />\n    <parameter name='format' value='json' />\n    <parameter name='httpMethod' value='POST' />\n    <parameter name='contentType' value='application/json' />\n    <parameter name='responsePrefix' value='dmaap' />",
+        "comments": "",
+        "outputs": 1,
+        "x": 676.5,
+        "y": 521.0833168029785,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "c2fb651f.83fdf8",
+                "f266f5d2.b65708"
+            ]
+        ]
+    },
+    {
+        "id": "d9c9c262.acaa7",
+        "type": "set",
+        "name": "set",
+        "xml": "<set>\n<parameter name='tmp.oofpcipoc-dmaap.requestID' value='`$prop.CMNotify-dmaap.requestID`'/>\n<parameter name='tmp.oofpcipoc-dmaap.aai' value=\"`$prop.CMNotify-dmaap.aai`\"/>\n<parameter name='tmp.oofpcipoc-dmaap.version' value='`$prop.CMNotify-dmaap.version`'/>\n<parameter name='tmp.oofpcipoc-dmaap.action' value='`$prop.CMNotify-dmaap.action`'/>\n<parameter name='tmp.oofpcipoc-dmaap.payload' value='`$nbrlist-change-notification-input.payload`'/>",
+        "comments": "",
+        "x": 671.166748046875,
+        "y": 427.0833168029785,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "c2fb651f.83fdf8",
+        "type": "failure",
+        "name": "failure",
+        "xml": "<outcome value='failure'>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 872,
+        "y": 461.00000381469727,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "1c059a5a.142026"
+            ]
+        ]
+    },
+    {
+        "id": "f266f5d2.b65708",
+        "type": "success",
+        "name": "success",
+        "xml": "<outcome value='success'>\n",
+        "comments": "",
+        "outputs": 1,
+        "x": 857.9998779296875,
+        "y": 594.999942779541,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "f560935d.61fab"
+            ]
+        ]
+    },
+    {
+        "id": "1c059a5a.142026",
+        "type": "block",
+        "name": "block",
+        "xml": "<block>\n",
+        "atomic": "false",
+        "comments": "",
+        "outputs": 1,
+        "x": 1062.9998779296875,
+        "y": 491.0000343322754,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "47ce8954.135548"
+            ]
+        ]
+    },
+    {
+        "id": "47ce8954.135548",
+        "type": "returnFailure",
+        "name": "return failure",
+        "xml": "<return status='failure'>\n<parameter name='ack-final' value='Y'/>\n<parameter name=\"error-code\" value=\"500\" />\n<parameter name=\"error-message\" value=\"Error publishing DMAAP message. ConfigDB Updated; TO be rolled back...will handle next release\" />",
+        "comments": "",
+        "x": 1241.999568939209,
+        "y": 488.00000190734863,
+        "z": "e365f261.0028d",
+        "wires": []
+    },
+    {
+        "id": "f560935d.61fab",
+        "type": "block",
+        "name": "block",
+        "xml": "<block>\n",
+        "atomic": "false",
+        "comments": "",
+        "outputs": 1,
+        "x": 1052.9996337890625,
+        "y": 578.9999732971191,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "9d733460.1d7b38"
+            ]
+        ]
+    },
+    {
+        "id": "9d733460.1d7b38",
+        "type": "record",
+        "name": "record",
+        "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.FileRecorder\">\n<parameter name=\"file\" value=\"/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log\" />\n<parameter name=\"level\" value=\"info\" />\n<parameter name=\"field1\" value=\"DMAAP Message Successfully Published \"/>",
+        "comments": "",
+        "outputs": 1,
+        "x": 1231.9997024536133,
+        "y": 577.9999599456787,
+        "z": "e365f261.0028d",
+        "wires": [
+            []
+        ]
+    },
+    {
+        "id": "7c1b714b.48842",
+        "type": "block",
+        "name": "block : Publish DMAAP Message",
+        "xml": "<block atomic='true'>",
+        "atomic": "true",
+        "comments": "",
+        "outputs": 1,
+        "x": 427,
+        "y": 465,
+        "z": "e365f261.0028d",
+        "wires": [
+            [
+                "d9c9c262.acaa7",
+                "9491fd51.6d973"
+            ]
+        ]
+    },
+    {
+        "id": "78866421.b367ac",
+        "type": "comment",
+        "name": "DMAAP Publish Not Reqd. Just a placeholder",
+        "info": "",
+        "comments": "",
+        "x": 391,
+        "y": 519,
+        "z": "e365f261.0028d",
+        "wires": []
+    }
+]
diff --git a/platform-logic/cMNotify-api/src/main/resources/graph.versions b/platform-logic/cMNotify-api/src/main/resources/graph.versions
new file mode 100644
index 0000000..a5e04b2
--- /dev/null
+++ b/platform-logic/cMNotify-api/src/main/resources/graph.versions
@@ -0,0 +1 @@
+CM-NOTIFY-API nbrlist-change-notification ${project.version} sync
diff --git a/platform-logic/cMNotify-api/src/main/xml/CM-NOTIFY-API_nbrlist-change-notification.xml b/platform-logic/cMNotify-api/src/main/xml/CM-NOTIFY-API_nbrlist-change-notification.xml
new file mode 100644
index 0000000..5838064
--- /dev/null
+++ b/platform-logic/cMNotify-api/src/main/xml/CM-NOTIFY-API_nbrlist-change-notification.xml
@@ -0,0 +1,126 @@
+<service-logic
+    xmlns='http://www.onap.org/sdnc/svclogic'
+    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='CM-NOTIFY-API' version='${project.version}'>
+    <method rpc='nbrlist-change-notification' mode='sync'>
+        <block atomic='true'>
+            <for index='idx' start='0' end="`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`" >
+                <block atomic='true'>
+                    <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                        <parameter name="file" value="/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log" />
+                        <parameter name="level" value="info" />
+                        <parameter name="field1" value="Input RPC Payload request. FAP #:  "/>
+                        <parameter name="field2" value="`$idx`"/>
+                        <parameter name="field3" value="`$nbrlist-change-notification-input.fap-service[$idx].alias`"/>
+                        <parameter name="field4" value="`$nbrlist-change-notification-input.fap-service[$idx].cid`"/>
+                        <parameter name="field5" value="`$nbrlist-change-notification-input.fap-service[$idx].phy-cell-id-in-use`"/>
+                        <parameter name="field6" value="`$nbrlist-change-notification-input.fap-service[$idx].pnf-name`"/>
+                        <parameter name="field7" value="Number of neigbors Changed/To Be Added #:  "/>
+                        <parameter name="field8" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`"/>
+                    </record>
+                    <for index='idy' start='0' end="`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`" >
+                        <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                            <parameter name="file" value="/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log" />
+                            <parameter name="level" value="info" />
+                            <parameter name="field1" value="Neighbor #:  "/>
+                            <parameter name="field2" value="`$idy`"/>
+                            <parameter name="field3" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].plmnid`"/>
+                            <parameter name="field4" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].cid`"/>
+                            <parameter name="field5" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].phy-cell-id`"/>
+                            <parameter name="field6" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].pnf-name`"/>
+                            <parameter name="field7" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].blacklisted`"/>
+                        </record>
+                    </for>
+                </block>
+            </for>
+            <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                <parameter name="file" value="/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log" />
+                <parameter name="level" value="info" />
+                <parameter name="field1" value="RPC to handle VES event: nbrlist change notification invoked. Number of FAP services for which neighbors have changed:  "/>
+                <parameter name="field2" value="`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`"/>
+            </record>
+            <execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >
+                <parameter name='fileName' value='/opt/onap/ccsdk/data/properties/sdnr-CMNotify-api-dg.properties' />
+                <parameter name='contextPrefix' value='prop' />
+            </execute>
+            <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                <parameter name="file" value="/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log" />
+                <parameter name="level" value="info" />
+                <parameter name="field1" value="Properties read ..configDB URL"/>
+                <parameter name="field2" value="`$prop.configdb.url`"/>
+                <parameter name="field3" value="Properties read ..DMAAP Msg Router URL"/>
+                <parameter name="field4" value="`$prop.configdb.url`"/>
+                <parameter name="field5" value="`$prop.dmaap-message-router.url`"/>
+                <parameter name="field6" value="`$prop.controller.pwd`"/>
+                <parameter name="field7" value="`$prop.controller.url`"/>
+            </record>
+            <for index='idx' start='0' end="`$nbrlist-change-notification-input.fap-service-number-of-entries-changed`" >
+                <block atomic='true'>
+                    <set>
+                        <parameter name="tmp.alias" value="`$nbrlist-change-notification-input.fap-service[$idx].alias`"/>
+                        <parameter name="tmp.cid" value="`$nbrlist-change-notification-input.fap-service[$idx].cid`"/>
+                        <parameter name="tmp.phy-cell-id-in-use" value="`$nbrlist-change-notification-input.fap-service[$idx].phy-cell-id-in-use`"/>
+                        <parameter name="tmp.pnf-name" value="`$nbrlist-change-notification-input.fap-service[$idx].pnf-name`"/>
+                        <parameter name="tmp.lte-cell-number-of-entries" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`"/>
+                    </set>
+                    <for index='idy' start='0' end="`$nbrlist-change-notification-input.fap-service[$idx].lte-cell-number-of-entries`" >
+                        <block atomic='true'>
+                            <set>
+                                <parameter name="tmp.nbr.plmnid" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].plmnid`"/>
+                                <parameter name="tmp.nbr.cid" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].cid`"/>
+                                <parameter name="tmp.nbr.phy-cell-id" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].phy-cell-id`"/>
+                                <parameter name="tmp.nbr.pnf-name" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].pnf-name`"/>
+                                <parameter name="tmp.nbr.blacklisted" value="`$nbrlist-change-notification-input.fap-service[$idx].lte-ran-neighbor-list-in-use-lte-cell-changed[$idy].blacklisted`"/>
+                            </set>
+                            <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >
+                                <parameter name="source" value="`$prop.restapi.configdb.add-nbrlist-change-per-notif`"/>
+                                <parameter name="outputPath" value="tmp.configdb.add-nbrlist-change-per-notif.url"/>
+                                <parameter name="target" value="{cellId}"/>
+                                <parameter name="replacement" value="`$tmp.cid`"/>
+                            </execute>
+                            <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                                <parameter name="file" value="/opt/opendaylight/current/data/log/handle-nbrlist-change-notif.log" />
+                                <parameter name="level" value="info" />
+                                <parameter name="field1" value="URL for configDB neighbor cell ADD"/>
+                                <parameter name='field2' value="`$prop.configdb.url + $tmp.configdb.add-nbrlist-change-per-notif.url`" />
+                                <parameter name='field3' value="`$tmp.nbr.cid`" />
+                                <parameter name='field4' value="`$tmp.nbr.blacklisted`" />
+                            </record>
+                            <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+                                <parameter name="templateFileName" value="`$prop.restapi.templateDir + '/CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json'`" />
+                                <parameter name="restapiUrl" value="`$prop.configdb.url + $tmp.configdb.add-nbrlist-change-per-notif.url`"/>
+                                <parameter name="httpMethod" value="PUT"/>
+                                <parameter name="responsePrefix" value="CMNotify-configdb-response"/>
+                                <parameter name='contentType' value='application/json' />
+                                <parameter name='format' value='json' />
+                                <parameter name='accept' value='application/json' />
+                                <outcome value='failure'>
+                                    <block>
+                                        <return status='failure'>
+                                            <parameter name='ack-final' value='Y'/>
+                                            <parameter name="error-code" value="500" />
+                                            <parameter name="error-message" value="Error adding neighbor to configdb. Aborting notification update" />
+                                        </return>
+                                    </block>
+                                </outcome>
+                                <outcome value='success'>
+                                    <block>
+                                        <record plugin="org.onap.ccsdk.sli.core.sli.recording.FileRecorder">
+                                            <parameter name="file" value="/opt/opendaylight/current/data/log/ves-nbrlist-change-notif.log" />
+                                            <parameter name="level" value="info" />
+                                            <parameter name="field1" value="Neighbor Added to ConfigDB "/>
+                                        </record>
+                                    </block>
+                                </outcome>
+                            </execute>
+                        </block>
+                    </for>
+                </block>
+            </for>
+            <return status='success'>
+                <parameter name="ack-final-indicator" value="Y" />
+                <parameter name="error-code" value="200" />
+                <parameter name="error-message" value="SUCCESSFUL Execution" />
+            </return>
+        </block>
+    </method>
+</service-logic>
diff --git a/platform-logic/pom.xml b/platform-logic/pom.xml
index 1d8c373..8b243ea 100644
--- a/platform-logic/pom.xml
+++ b/platform-logic/pom.xml
@@ -23,6 +23,7 @@
 		<module>sliapi</module>
 		<module>oofpcipoc-api</module>
 		<module>a1Adapter-api</module>
+		<module>cMNotify-api</module>
 		<module>restapi-templates</module>
 		<module>installer</module>
 	</modules>
diff --git a/platform-logic/restapi-templates/src/main/json/CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json b/platform-logic/restapi-templates/src/main/json/CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json
new file mode 100644
index 0000000..5751e15
--- /dev/null
+++ b/platform-logic/restapi-templates/src/main/json/CMNotify-add-nbr-to-configdb-per-nbrlist-change-notif.json
@@ -0,0 +1,4 @@
+{
+  "targetCellId": ${tmp.nbr.cid},
+  "ho": ${tmp.nbr.blacklisted}
+}