Define DMI REST interface for Datajobs 04/137704/6
authoregernug <gerard.nugent@est.tech>
Wed, 17 Apr 2024 09:08:38 +0000 (10:08 +0100)
committeregernug <gerard.nugent@est.tech>
Thu, 25 Apr 2024 11:35:33 +0000 (12:35 +0100)
Define new REST interface :
Method: POST
Path: /dmi/v1/dataJob/{requestId}
New Interface DMI-I-02

Issue-ID: CPS-2141

Change-Id: I46ddbc4b179fcdfc3396d4044aa201dc7f503918
Signed-off-by: egernug <gerard.nugent@est.tech>
docs/api/swagger/openapi-datajob.yaml [new file with mode: 0644]
openapi/openapi-datajob.yml [new file with mode: 0644]
pom.xml

diff --git a/docs/api/swagger/openapi-datajob.yaml b/docs/api/swagger/openapi-datajob.yaml
new file mode 100644 (file)
index 0000000..04a5bf1
--- /dev/null
@@ -0,0 +1,214 @@
+openapi: 3.0.3
+info:
+  description: Support datajobs through one or more subjob for each DMI and Data Producer
+    Identifier combination
+  title: NCMP Data Subjob API
+  version: 1.0.0
+servers:
+  - url: /dmi
+tags:
+  - description: DMI plugin rest apis
+    name: dmi-datajob
+paths:
+  /v1/dataJob/{requestId}:
+    post:
+      description: Create a read request
+      operationId: createReadRequest
+      parameters:
+        - description: Identifier for the overall Datajob
+          explode: false
+          in: path
+          name: requestId
+          required: true
+          schema:
+            example: some-identifier
+            type: string
+          style: simple
+      requestBody:
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobRequest'
+        description: Operation body
+      responses:
+        "200":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/createReadRequest_200_response'
+          description: Response for subjob
+      tags:
+        - dmi-datajob
+components:
+  parameters:
+    requestIdInPath:
+      description: Identifier for the overall Datajob
+      explode: false
+      in: path
+      name: requestId
+      required: true
+      schema:
+        example: some-identifier
+        type: string
+      style: simple
+  schemas:
+    SubjobRequest:
+      properties:
+        dataAcceptType:
+          description: Defines the data response accept type
+          example: application/vnd.3gpp.object-tree-hierarchical+json
+          type: string
+        dataContentType:
+          description: Defines the data request content type
+          example: application/3gpp-json-patch+json
+          type: string
+        dataProducerId:
+          description: ID of the producer registered by DMI for the paths in the operations
+            in this request
+          example: my-data-producer-identifier
+          type: string
+        data:
+          $ref: '#/components/schemas/SubjobRequest_data'
+      required:
+        - data
+        - dataProducerId
+      type: object
+    ReadOperation:
+      example:
+        op: read
+        operationId: 1
+        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2
+        attributes: userLabel
+        scope:
+          scopeTyp: BASE_ONLY
+      items:
+        $ref: '#/components/schemas/ReadOperation_inner'
+      type: array
+    WriteOperation:
+      example:
+        op: add
+        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12
+        value:
+          id: 12
+          attributes:
+            userLabel: label12
+      items:
+        $ref: '#/components/schemas/WriteOperation_inner'
+      type: array
+    CmHandleProperties:
+      description: Private properties of the cm handle for the given path
+      type: object
+    Resource:
+      properties:
+        id:
+          description: Identifier of the resource object
+          example: resource-identifier
+          type: string
+        attributes:
+          additionalProperties:
+            example: "userLabel: label11"
+            type: string
+          description: Key value map representing the objects class attributes and
+            values
+          type: object
+      type: object
+    ActionParameters:
+      additionalProperties:
+        type: string
+      description: The input of the action in the form of key value pairs
+      type: object
+    Object:
+      type: object
+    createReadRequest_200_response:
+      example:
+        dataProducerJobId: dataProducerJobId
+      properties:
+        dataProducerJobId:
+          description: The data job ID.
+          type: string
+      type: object
+    SubjobRequest_data:
+      oneOf:
+        - $ref: '#/components/schemas/ReadOperation'
+        - $ref: '#/components/schemas/WriteOperation'
+    ReadOperation_inner:
+      properties:
+        path:
+          description: Defines the resource on which operation is executed
+          example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+          type: string
+        op:
+          description: Describes the operation to execute
+          example: read
+          type: string
+        operationId:
+          description: Unique identifier for the operation within the request
+          example: "1"
+          type: string
+        attributes:
+          description: This parameter specifies the attributes of the scoped resources
+            that are returned
+          items:
+            example: cellId
+            type: string
+          type: array
+        fields:
+          description: This parameter specifies the attribute fields of the scoped
+            resources that are returned
+          items:
+            type: string
+          type: array
+        filter:
+          description: This parameter is used to filter the scoped Managed Objects.
+            Only Managed Objects passing the filter criteria will be fetched
+          example: NRCellDU/attributes/administrativeState==LOCKED
+          type: string
+        scopeType:
+          description: ScopeType selects MOs depending on relationships with Base
+            Managed Object
+          example: BASE_ONLY
+          type: string
+        scopeLevel:
+          description: Only used when the scope type is BASE_NTH_LEVEL to specify
+            amount of levels to search
+          example: 0
+          type: integer
+        moduleSetTag:
+          description: Module set identifier
+          example: my-module-set-tag
+          type: string
+        cmHandleProperties:
+          description: Private properties of the cm handle for the given path
+          type: object
+      required:
+        - op
+        - path
+      type: object
+    WriteOperation_inner_value:
+      description: Value dependent on the op specified. Resource for an add. Object
+        for a replace. ActionParameters for an action.
+      oneOf:
+        - $ref: '#/components/schemas/Resource'
+        - $ref: '#/components/schemas/ActionParameters'
+        - $ref: '#/components/schemas/Object'
+      type: object
+    WriteOperation_inner:
+      properties:
+        path:
+          description: Defines the resource on which operation is executed
+          example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+          type: string
+        op:
+          description: Describes the operation to execute
+          example: add
+          type: string
+        operationId:
+          description: Unique identifier for the operation within the request
+          example: "1"
+          type: string
+        value:
+          $ref: '#/components/schemas/WriteOperation_inner_value'
+      required:
+        - op
+        - path
+      type: object
diff --git a/openapi/openapi-datajob.yml b/openapi/openapi-datajob.yml
new file mode 100644 (file)
index 0000000..b572ff3
--- /dev/null
@@ -0,0 +1,203 @@
+#  ============LICENSE_START=======================================================
+#  Copyright (C) 2024 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=========================================================
+
+openapi: 3.0.3
+info:
+  title: NCMP Data Subjob API
+  description: Support datajobs through one or more subjob for each DMI and Data Producer Identifier combination
+  version: 1.0.0
+servers:
+  - url: /dmi
+tags:
+  - description: DMI plugin rest apis
+    name: dmi-datajob
+paths:
+  /v1/dataJob/{requestId}:
+    post:
+      description: Create a read request
+      operationId: createReadRequest
+      parameters:
+        - $ref: '#/components/parameters/requestIdInPath'
+      requestBody:
+        description: Operation body
+        content:
+          application/3gpp-json-patch+json:
+            schema:
+              $ref: '#/components/schemas/SubjobRequest'
+      tags:
+        - dmi-datajob
+      responses:
+        "200":
+          description: Response for subjob
+          content:
+            application/json:
+              schema:
+                type: object
+                properties:
+                  dataProducerJobId:
+                    type: string
+                    description: The data job ID.
+components:
+  parameters:
+    requestIdInPath:
+      description: Identifier for the overall Datajob
+      in: path
+      name: requestId
+      required: true
+      schema:
+        example: some-identifier
+        type: string
+  schemas:
+    SubjobRequest:
+      type: object
+      required:
+        - dataProducerId
+        - data
+      properties:
+        dataAcceptType:
+          description: Defines the data response accept type
+          example: application/vnd.3gpp.object-tree-hierarchical+json
+          type: string
+        dataContentType:
+          description: Defines the data request content type
+          example: application/3gpp-json-patch+json
+          type: string
+        dataProducerId:
+          description: ID of the producer registered by DMI for the paths in the operations in this request
+          example: my-data-producer-identifier
+          type: string
+        data:
+          oneOf:
+            - $ref: '#/components/schemas/ReadOperation'
+            - $ref: '#/components/schemas/WriteOperation'
+    ReadOperation:
+      example:
+        op: read
+        operationId: 1
+        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=2
+        attributes: userLabel
+        scope:
+          scopeTyp: BASE_ONLY
+      type: array
+      items:
+        type: object
+        required:
+          - path
+          - op
+        properties:
+          path:
+            description: Defines the resource on which operation is executed
+            example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+            type: string
+          op:
+            description: Describes the operation to execute
+            example: read
+            type: string
+          operationId:
+            description: Unique identifier for the operation within the request
+            example: 1
+            type: string
+          attributes:
+            description: This parameter specifies the attributes of the scoped resources that are returned
+            type: array
+            items:
+              example: cellId
+              type: string
+          fields:
+            description: This parameter specifies the attribute fields of the scoped resources that are returned
+            type: array
+            items:
+              type: string
+          filter:
+            description: This parameter is used to filter the scoped Managed Objects. Only Managed Objects passing the filter criteria will be fetched
+            example: NRCellDU/attributes/administrativeState==LOCKED
+            type: string
+          scopeType:
+            description: ScopeType selects MOs depending on relationships with Base Managed Object
+            example: BASE_ONLY
+            type: string
+          scopeLevel:
+            description: Only used when the scope type is BASE_NTH_LEVEL to specify amount of levels to search
+            example: 0
+            type: integer
+          moduleSetTag:
+            description: Module set identifier
+            example: my-module-set-tag
+            type: string
+          cmHandleProperties:
+            description: Private properties of the cm handle for the given path
+            $ref: '#/components/schemas/CmHandleProperties'
+    WriteOperation:
+      example:
+        op: add
+        path: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003/GNBCUCPFunction=1/EUtraNetwork=1/EUtranFrequency=12
+        value:
+          id: 12
+          attributes:
+            userLabel: label12
+      type: array
+      items:
+        type: object
+        required:
+          - path
+          - op
+        properties:
+          path:
+            description: Defines the resource on which operation is executed
+            example: SubNetwork=Europe/SubNetwork=Ireland/MeContext=NR03gNodeBRadio00003/ManagedElement=NR03gNodeBRadio00003
+            type: string
+          op:
+            description: Describes the operation to execute
+            example: add
+            type: string
+          operationId:
+            description: Unique identifier for the operation within the request
+            example: 1
+            type: string
+          value:
+            description: Value dependent on the op specified. Resource for an add. Object for a replace. ActionParameters for an action.
+            type: object
+            oneOf:
+              - $ref: '#/components/schemas/Resource'
+              - $ref: '#/components/schemas/ActionParameters'
+              - $ref: '#/components/schemas/Object'
+    CmHandleProperties:
+      description: Private properties of the cm handle for the given path
+      type: object
+    Resource:
+      type: object
+      properties:
+        id:
+          description: Identifier of the resource object
+          example: resource-identifier
+          type: string
+        attributes:
+          description: Key value map representing the objects class attributes and values
+          type: object
+          additionalProperties:
+            example: 'userLabel: label11'
+            type: string
+    ActionParameters:
+      description: The input of the action in the form of key value pairs
+      type: object
+      additionalProperties:
+        type: string
+    Object:
+      type: object
+
+
diff --git a/pom.xml b/pom.xml
index 1a21805..8e20d8f 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -1,6 +1,6 @@
 <!--
   ============LICENSE_START=======================================================
-  Copyright (c) 2021-2023 Nordix Foundation.
+  Copyright (c) 2021-2024 Nordix Foundation.
   Modifications Copyright (C) 2021 Bell Canada.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
                 <version>6.6.0</version>
                 <executions>
                     <execution>
+                        <id>dmi-code-gen</id>
                         <goals>
                             <goal>generate</goal>
                         </goals>
                             </configOptions>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>dmi-datajob-code-gen</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <configuration>
+                            <inputSpec>${project.basedir}/openapi/openapi-datajob.yml</inputSpec>
+                            <generatorName>spring</generatorName>
+                            <generateSupportingFiles>false</generateSupportingFiles>
+                            <invokerPackage>org.onap.cps.ncmp.dmi.rest.controller</invokerPackage>
+                            <apiPackage>org.onap.cps.ncmp.dmi.rest.api</apiPackage>
+                            <modelPackage>org.onap.cps.ncmp.dmi.model</modelPackage>
+                            <generateAliasAsModel>true</generateAliasAsModel>
+                            <configOptions>
+                                <sourceFolder>src/gen/java</sourceFolder>
+                                <dateLibrary>java11</dateLibrary>
+                                <interfaceOnly>true</interfaceOnly>
+                                <useTags>true</useTags>
+                                <useSpringBoot3>true</useSpringBoot3>
+                                <openApiNullable>false</openApiNullable>
+                                <skipDefaultInterface>true</skipDefaultInterface>
+                            </configOptions>
+                        </configuration>
+                    </execution>
                     <execution>
                         <id>openapi-yaml-gen</id>
                         <goals>
                         <configuration>
                             <inputSpec>${project.basedir}/openapi/openapi.yml</inputSpec>
                             <generatorName>openapi-yaml</generatorName>
+                            <configOptions>
+                                <outputFile>openapi/openapi.yaml</outputFile>
+                            </configOptions>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>openapi-datajob-yaml-gen</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                        <phase>compile</phase>
+                        <configuration>
+                            <inputSpec>${project.basedir}/openapi/openapi-datajob.yml</inputSpec>
+                            <generatorName>openapi-yaml</generatorName>
+                            <configOptions>
+                                <outputFile>openapi/openapi-datajob.yaml</outputFile>
+                            </configOptions>
                         </configuration>
                     </execution>
                 </executions>
                                 <resource>
                                     <directory>${project.basedir}/target/generated-sources/openapi/openapi</directory>
                                     <includes>
-                                        <include>openapi.yaml</include>
+                                        <include>openapi*.yaml</include>
                                     </includes>
                                 </resource>
                             </resources>