CPS-1152: Spike Conform JSON and dmi-registry Casing Conventions

CPS-1152: Spike Conform JSON and dmi-registry casing conventionsClosed

Issue:

NCMP has an inconsistency between the JSON supplied/received and what exists in the database. This is producing issues such as those related to CM Handle querying.



Create a CM Handle

Get a CM Handle

Query CM Handle



Create a CM Handle

Get a CM Handle

Query CM Handle

URI

POST: http://localhost:8883/ncmpInventory/v1/ch

GET:
http://localhost:8883/ncmp/v1/ch/CmHandle1

POST:
http://localhost:8883/ncmp/v1/ch/searches

JSON BODY

{
    "dmiPlugin": "http://{{WSL IP}}:8783",
    "createdCmHandles": [
        {
            "cmHandle": "CmHandle1",
            "cmHandleProperties": {
                "Books": "Sci-Fi Book"
            },
            "publicCmHandleProperties": {
                "Color": "yellow",
                "Size": "medium",
                "Shape": "circle"
            }
        }
    ]
}

N/A

{
    "cmHandleQueryParameters": [
        {
            "conditionName": "cmHandleWithCpsPath",
            "conditionParameters": [ {"cpsPath": "//state[@cm-handle-state='LOCKED']"} ]
        }
    ]
}

JSON RESPONSE

N/A

{
    "cmHandle": "CmHandle1",
    "publicCmHandleProperties": [
        {
            "Color": "yellow",
            "Shape": "circle",
            "Size": "medium"
        }
    ],
    "state": {
        "cmHandleState": "LOCKED",
        "lockReason": {
            "reason": "LOCKED_MISBEHAVING",
            "details": "some-details"
        },
        "lastUpdateTime": "2022-08-08T10:21:16.123+0000"
    }
}

[
    {
        "cmHandle": "CmHandle1",
        "publicCmHandleProperties": [
            {
                "Shape": "circle",
                "Size": "medium",
                "Color": "yellow"
            }
        ],
        "state": {
            "cmHandleState": "LOCKED",
            "lockReason": {
                "reason": "LOCKED_MISBEHAVING",
                "details": "some-details"
            },
            "lastUpdateTime": "2022-08-08T10:11:15.320+0000"
        }
    }
]

Inconsistencies

  1. cmHandleProperties != additional-properties

  2. publicCmHandleProperties != public-properties



  1. cmHandle != id

  2. cmHandleState != cm-handle-state

  3. lockReason != lock-reason

  4. lastUpdateTime != last-update-time

  5. Same as cell left

  1. Same as cell left



Description

Backwards Compatible

Convention Impacts

Overall CPS Convention impact

Consistency between yang model and JSON

Cost

Comments

Description

Backwards Compatible

Convention Impacts

Overall CPS Convention impact

Consistency between yang model and JSON

Cost

Comments

1

Change OpenApi to kebab-casing

No - This would involve changing what is in red above. So changes to cmhandle registration and JSON responses.

Would expect all endpoints to use kebab-casing: dataspace-name, schema-set.
Is what we do have now

Solved

Some endpoints effected

Version management needed

Not backwards compatible is a big issue

2

Change dmi-registry to camelCasing

No - Would involve internal changes. Only changes to CM Handle API.

IEEE Guidelines state yang identifiers should be in kebab casing https://1.ieee802.org/yang-guidelines/

Would expect all endpoints to use camel-casing: dataspaceName, schemaSet.
Not what we do now

Solved

Liquibase updates

Not even considering, too many impacts to codebase and breaks yang convention.

3

Do nothing / Document

Nothing changes

Conforms to conventions 

Would expect all endpoints to use kebab-casing: dataspace-name, schema-set.
Is what we do have now

Inconsistencies not addressed

Describe in RTD

Team recommends 

Foreseen Impacts

Change OpenApi to kebab-casing

We would change components.yaml to kebab-casing

components.yaml example

components.yaml example



components.yaml current
CmHandleCompositeState: type: object properties: cmHandleState: type: string example: ADVISED lockReason: $ref: '#/components/schemas/lock-reason' lastUpdateTime: type: string example: 2022-12-31T20:30:40.000+0000 dataSyncEnabled: type: boolean example: false dataSyncState: $ref: '#/components/schemas/dataStores'





components.yaml future
CmHandleCompositeState: type: object properties: cm-handle-state: type: string example: ADVISED lock-reason: $ref: '#/components/schemas/lock-reason' last-update-time: type: string example: 2022-12-31T20:30:40.000+0000 data-sync-enabled: type: boolean example: false data-sync-state: $ref: '#/components/schemas/dataStores'



This would change generated Java class:

CmHandleCompositeState.java example

CmHandleCompositeState.java example



CmHandleCompositeState.java current
public class CmHandleCompositeState { @JsonProperty("cmHandleState") private String cmHandleState = null; @JsonProperty("lockReason") private LockReason lockReason = null; @JsonProperty("lastUpdateTime") private String lastUpdateTime = null; @JsonProperty("dataSyncEnabled") private Boolean dataSyncEnabled = null; @JsonProperty("dataSyncState") private DataStores dataSyncState = null; public CmHandleCompositeState cmHandleState(String cmHandleState) { this.cmHandleState = cmHandleState; return this; } ...







CmHandleCompositeState.java future



And change JSON payload:

JSON Payload

JSON Payload









Change dmi-registry to camelCasing

Change the dmi-registry

dmi-registry

dmi-registry









Would involve new Liquibase changeset and updating dmi-registry everywhere.

Java code changes related to CmHandleQueries 

Open Questions

Do we want to match the dmi-registry in its entirety? See below inconsistencies for CM Handle registration body:

Do we want to match the dmi-registry in its entirety? See below inconsistencies for CM Handle registration body:

CM Handle Registration Body

CM Handle Registration Body Conforming to dmi-registry

"cmHandle": "CmHandle1"

"id":"CmHandle1"

"publicCmHandleProperties": [
            {
                "Shape": "circle",
                "Size": "medium",
                "Color": "yellow"
            }

]

"public-properties": [
            {
                "Shape": "circle",
                "Size": "medium",
                "Color": "yellow"
            }

]

"cmHandleProperties": {
                "Books": "Sci-Fi Book"
            }

"additional-properties": {
                "Books": "Sci-Fi Book"
            }