Update dmi-registry yang to support cmHandle State

- Added dmi-registry@2022-02-10 which contains the new dmi-registry yang model to support the cmHandle State.
- Added changelog 12 which removes previous dmi-registries from the db
- Added changelog 13 which adds new dmi-registry
- Edited yangResourceCsvGenerator.py so that it generates for each argument given and does not generate the module_name and revision for dmi-registry@2021-12-13.
- Updated rollback for changeset 11.1

Issue-ID: CPS-874
Signed-off-by: lukegleeson <luke.gleeson@est.tech>
Change-Id: I4ab949f0bc00a52376b42a5ac8a33d397eefcedf
diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml
index 434464a..e03dce3 100755
--- a/cps-parent/pom.xml
+++ b/cps-parent/pom.xml
@@ -3,7 +3,7 @@
   ============LICENSE_START=======================================================
   Copyright (c) 2021 Pantheon.tech.
   Modifications Copyright (C) 2021 Bell Canada.
-  Modifications Copyright (C) 2021 Nordix Foundation.
+  Modifications Copyright (C) 2021-2022 Nordix Foundation.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -421,6 +421,7 @@
                     <arguments>
                         <argument>yangResourceCsvGenerator.py</argument>
                         <argument>dmi-registry@2021-12-13</argument>
+                        <argument>dmi-registry@2022-02-10</argument>
                     </arguments>
                 </configuration>
             </plugin>
diff --git a/cps-ri/src/main/resources/changelog/changelog-master.yaml b/cps-ri/src/main/resources/changelog/changelog-master.yaml
index 14f3726..251cec6 100644
--- a/cps-ri/src/main/resources/changelog/changelog-master.yaml
+++ b/cps-ri/src/main/resources/changelog/changelog-master.yaml
@@ -1,5 +1,6 @@
 # ============LICENSE_START=======================================================
 # Copyright (c) 2021 Bell Canada.
+# Modifications Copyright (C) 2022 Nordix Foundation.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -37,3 +38,7 @@
       file: changelog/db/changes/10-loadData-dmi-registry-fragment.yaml
   - include:
       file: changelog/db/changes/11-add-column-to-yang-resources-table.yaml
+  - include:
+      file: changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml
+  - include:
+      file: changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml
diff --git a/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml b/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml
index 139e83b..8643a05 100644
--- a/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml
+++ b/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml
@@ -40,4 +40,4 @@
         - sql:
             sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null
       rollback:
-        comment: Rollback for change set 11.1 is not supported. Please rollback change set 11 to rollback changeset 11.1. Change set 11.1 removes null values from the yang_resource table created by change set 11.
\ No newline at end of file
+        sql: update yang_resource set module_name = null, revision = null where module_name = 'dummy_module_name' and revision = '2021-08-04'
\ No newline at end of file
diff --git a/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml
new file mode 100644
index 0000000..9eda029
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml
@@ -0,0 +1,157 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2022 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+databaseChangeLog:
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12
+      sql: delete from schema_set_yang_resources
+        where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model')
+        and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-05-20.yang')
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi/schema_set_yang_resources.csv'
+          quotchar: '"'
+          primaryKey: 'schema_set_id,yang_resource_id'
+          separator: '|'
+          tableName: 'schema_set_yang_resources'
+          usePreparedStatements: true
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12.1
+      sql: delete from yang_resource where name = 'dmi-registry@2021-05-20.yang'
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi/yang_resource.csv'
+          onlyUpdate: 'false'
+          primaryKey: 'id'
+          quotchar: '"'
+          separator: '|'
+          tableName: 'yang_resource'
+          columns:
+            - column:
+                header: name
+                name: name
+                type: STRING
+            - column:
+                header: content
+                name: content
+                type: STRING
+            - column:
+                header: checksum
+                name: checksum
+                type: STRING
+        sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12.2
+      sql: delete from schema_set_yang_resources
+        where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model')
+        and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-10-20.yang')
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv'
+          quotchar: '"'
+          primaryKey: 'schema_set_id,yang_resource_id'
+          separator: '|'
+          tableName: 'schema_set_yang_resources'
+          usePreparedStatements: true
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12.3
+      sql: delete from yang_resource where name = 'dmi-registry@2021-10-20.yang'
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv'
+          onlyUpdate: 'false'
+          primaryKey: 'id'
+          quotchar: '"'
+          separator: '|'
+          tableName: 'yang_resource'
+          columns:
+            - column:
+                header: name
+                name: name
+                type: STRING
+            - column:
+                header: content
+                name: content
+                type: STRING
+            - column:
+                header: checksum
+                name: checksum
+                type: STRING
+        sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12.4
+      sql: delete from schema_set_yang_resources
+        where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model')
+        and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-12-13.yang')
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv'
+          quotchar: '"'
+          primaryKey: 'schema_set_id,yang_resource_id'
+          separator: '|'
+          tableName: 'schema_set_yang_resources'
+          usePreparedStatements: true
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-delete
+      id: 12.5
+      sql: delete from yang_resource where name = 'dmi-registry@2021-12-13.yang'
+      rollback:
+        loadUpdateData:
+          encoding: UTF-8
+          file: 'changelog/db/changes/data/dmi//generated-csv/generated_yang_resource_dmi-registry@2021-12-13.csv'
+          onlyUpdate: 'false'
+          primaryKey: 'id'
+          quotchar: '"'
+          separator: '|'
+          tableName: 'yang_resource'
+          columns:
+            - column:
+                header: name
+                name: name
+                type: STRING
+            - column:
+                header: content
+                name: content
+                type: STRING
+            - column:
+                header: checksum
+                name: checksum
+                type: STRING
+        sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null
+
diff --git a/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml
new file mode 100644
index 0000000..3351b54
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml
@@ -0,0 +1,66 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2022 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+
+databaseChangeLog:
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-load-revision-2022-02-10
+      id: 13
+      loadUpdateData:
+        encoding: UTF-8
+        file: 'changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_dmi-registry@2022-02-10.csv'
+        onlyUpdate: 'false'
+        primaryKey: 'id'
+        quotchar: '"'
+        separator: '|'
+        tableName: 'yang_resource'
+        columns:
+          - column:
+              header: name
+              name: name
+              type: STRING
+          - column:
+              header: content
+              name: content
+              type: STRING
+          - column:
+              header: checksum
+              name: checksum
+              type: STRING
+          - column:
+              header: module_name
+              name: module_name
+              type: STRING
+          - column:
+              header: revision
+              name: revision
+              type: STRING
+      rollback:
+        - sql:
+            sql: delete from yang_resource where name = 'dmi-registry@2022-02-10.yang'
+
+  - changeSet:
+      author: cps
+      label: dmi-registry-schema-load-revision-2022-02-10
+      id: 13.1
+      sql: INSERT INTO schema_set_yang_resources (schema_set_id, yang_resource_id)
+        VALUES ((select id from schema_set where name = 'ncmp-dmi-registry-model'), (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang'));
+      rollback:
+        sql: delete from schema_set_yang_resources
+          where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model')
+          and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang')
\ No newline at end of file
diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/yang-models/dmi-registry@2022-02-10.yang b/cps-ri/src/main/resources/changelog/db/changes/data/yang-models/dmi-registry@2022-02-10.yang
new file mode 100644
index 0000000..3c6d990
--- /dev/null
+++ b/cps-ri/src/main/resources/changelog/db/changes/data/yang-models/dmi-registry@2022-02-10.yang
@@ -0,0 +1,81 @@
+module dmi-registry {
+
+  yang-version 1.1;
+
+  namespace "org:onap:cps:ncmp";
+
+  prefix dmi-reg;
+
+  contact "toine.siebelink@est.tech";
+
+  revision "2022-02-10" {
+    description
+    "Added State, LockReason, LockReasonDetails to aid with cmHandle sync and timestamp to aid with retry/timeout scenarios";
+  }
+
+  revision "2021-12-13" {
+    description
+    "Added new list of public additional properties for a Cm-Handle which are exposed to clients of the NCMP interface";
+  }
+
+  revision "2021-10-20" {
+    description
+    "Added dmi-data-service-name & dmi-model-service-name to allow separate DMI instances for each responsibility";
+  }
+
+  revision "2021-05-20" {
+    description
+    "Initial Version";
+  }
+
+  container dmi-registry {
+    list cm-handles {
+      key "id";
+      leaf id {
+        type string;
+      }
+      leaf dmi-service-name {
+        type string;
+      }
+      leaf dmi-data-service-name {
+        type string;
+      }
+      leaf dmi-model-service-name {
+        type string;
+      }
+
+      list additional-properties {
+        key "name";
+        leaf name {
+          type string;
+        }
+        leaf value {
+          type string;
+        }
+      }
+
+      list public-properties {
+        key "name";
+        leaf name {
+          type string;
+        }
+        leaf value {
+          type string;
+        }
+      }
+
+      leaf state {
+        type string;
+      }
+      leaf lock-reason {
+        type string;
+      }
+      leaf lock-reason-details {
+        type string;
+      }
+      leaf last-update-time {
+        type string;
+      }
+    }
+  }
+}
diff --git a/cps-ri/src/main/resources/yangResourceCsvGenerator.py b/cps-ri/src/main/resources/yangResourceCsvGenerator.py
index 9a4077b..3a076d4 100644
--- a/cps-ri/src/main/resources/yangResourceCsvGenerator.py
+++ b/cps-ri/src/main/resources/yangResourceCsvGenerator.py
@@ -18,21 +18,49 @@
 
 
 import csv
+import datetime
 import hashlib
 import sys
+import re
 
 yang_source = ''
 checksum = ''
+regexForModuleName = '(?<=module)(.*)(?={)'
+regexForRevision = '(?<=revision)(.*)(?={)'
 
-for yang_source in sys.argv[1:]:
-    checksum = hashlib.sha256(str(yang_source).encode()).hexdigest()
+def main():
+    for yang_source in sys.argv[1:]:
+        checksum = hashlib.sha256(str(yang_source).encode()).hexdigest()
 
-with open('changelog/db/changes/data/yang-models/' + yang_source + '.yang') as content:
-    dmiRegistry = content.read()
+        with open('changelog/db/changes/data/yang-models/' + yang_source + '.yang', 'r') as content:
+            dmiRegistry = content.read()
 
-# open the file in the write mode
-with open('changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_' + yang_source + '.csv', 'w', newline='') \
-        as file:
-    writer = csv.writer(file, delimiter='|')
-    writer.writerow(["name", "content", "checksum"])
-    writer.writerow([yang_source + '.yang', dmiRegistry, checksum])
+        try:
+            latestRevision = re.search(regexForRevision, dmiRegistry).group(0).replace('\"','').strip()
+        except:
+            print("ERROR IN in yangResourceCsvGenerator.py: Unable to find revision for " + yang_source + '.yang')
+
+        try:
+            module_name = re.search(regexForModuleName, dmiRegistry).group(0).strip()
+        except:
+            print("ERROR IN in yangResourceCsvGenerator.py: Unable to find module name for " + yang_source + '.yang')
+
+        #If true, file was created after module_name and revision columns were added to yang-resources table
+        writeWithModuleNameAndRevision = yang_source != 'dmi-registry@2021-12-13'
+
+        try:
+            # open the file in the write mode
+            with open('changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_' + yang_source + '.csv', 'w', newline='') \
+                    as file:
+                writer = csv.writer(file, delimiter='|')
+                if(writeWithModuleNameAndRevision):
+                    writer.writerow(["name", "content", "checksum", "module_name", "revision"])
+                    writer.writerow([yang_source + '.yang', dmiRegistry, checksum, module_name, latestRevision])
+                else:
+                    writer.writerow(["name", "content", "checksum"])
+                    writer.writerow([yang_source + '.yang', dmiRegistry, checksum])
+        except:
+            print("ERROR IN in yangResourceCsvGenerator.py: Unable to write to changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_" + yang_source + ".csv")
+
+
+main()
\ No newline at end of file