CPS-817: Create Endpoint for Get Cm Handle Details
CPS-817: Create Endpoint For Get Cm Handles (incl. public properties) By NameClosed
Creating a new get cm handle endpoint.
REST layer
nmcp.yml
New endpoint for retrieveCmHandleByName to retrieve cm handle details by the cm handles name/id.
NetworkComProxyController.java
New method retrieveCmHandleByName() which calls a new method getCmHandleDetails from NetworkCmProxyDataService
NetworkCmProxyController.groovy
Add test for scenario above.
Service Layer
NetworkCmProxyDataService.java
New getCmHandleDetails() method to be overwritten.
NetworkCmProxyDataServiceImp.java
Implement getCmHandleDetails and call retrieveCmHandleDetails from the persistence layer.
Persistence Layer
PersistenceCmHandleRetriever.java
New method retrieveCmHandleDetails().
API details
Description | URI | Sample Response Body |
---|---|---|
Get Cm Handle details by name. | GET {ncmpRoot}/ncmp/v1/ch/PNFDemo | { |
Open Question
Currently within CPS we have two separate models for CmHandles these being CmHandle and PersistenceCmHandle. These are both very similar models, the primary difference being that persistenceCmHandle also contains references to the dmiServiceName, the dmiDataServiceName and the dmiModelServiceName as seen below.
Is it necessary to have both these models?
As PersistenceCmHandle has all the necessary fields of CmHandle, can we just modify existing code to use PerisistenceCmHandle and remove CmHandle?
Cm Handle Model | Persistence Cm Handle Model |
---|---|
CmHandle.java/**
* CmHandle.
*/
@Validated
@Getter
@Setter
@NoArgsConstructor
public class CmHandle {
@JsonProperty("cmHandle")
private String cmHandleID;
@JsonSetter(nulls = Nulls.AS_EMPTY)
@JsonProperty("cmHandleProperties")
private Map<String, String> dmiProperties = Collections.emptyMap();
@JsonSetter(nulls = Nulls.AS_EMPTY)
@JsonProperty("publicCmHandleProperties")
private Map<String, String> publicProperties = Collections.emptyMap();
}
|
PersistenceCmHandle.java/**
* DmiRegistry.
*/
@Getter
@Setter
@NoArgsConstructor
public class PersistenceCmHandle {
private String id;
@JsonProperty("dmi-service-name")
private String dmiServiceName;
@JsonProperty("dmi-data-service-name")
private String dmiDataServiceName;
@JsonProperty("dmi-model-service-name")
private String dmiModelServiceName;
@JsonProperty("additional-properties")
private List<Property> dmiProperties;
@JsonProperty("public-properties")
private List<Property> publicProperties;
|
|
|
PROS
Removing potentially redundant model that is not used.
CONS
Could be a time consuming process to refactor the code for functionality which already works
Potential Issue
If we decide to only use one model, one potentially backwards incompatible change is the property names, which differ between persistenceCmHandle and the CmHandle class.
Also should this refactoring be done as part of a separate story?
Conclusion
Add more detailed comments and rename all related cm handle models.
Renamed Models
RestCmHandle → RestInputCmHandle (generated model)
CmHandle → NcmpServiceCmHandle
PersistenceCmHandle → YangModelCmHandle
PeristenceCmHandlesList → YangModelCmHandleList
More details can also be found in the following wiki in regard to Cm Handle models, along with CPS-NCMP's layers and dependencies, and paths taken when registering a cm handle and retrieving cm handle details.