#  ============LICENSE_START=======================================================
#  Copyright (C) 2021 Nordix Foundation
#  Modifications Copyright (C) 2021 Pantheon.tech
#  ================================================================================
#  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=========================================================

components:
  schemas:
    ErrorMessage:
      type: object
      title: Error
      properties:
        status:
          type: string
        message:
          type: string
        details:
          type: string

    RestDmiPluginRegistration:
      type: object
      properties:
        dmiPlugin:
          type: string
          example: onap-dmi-plugin
        createdCmHandles:
          type: array
          items:
            $ref: '#/components/schemas/RestCmHandle'
        updatedCmHandles:
          type: array
          items:
            $ref: '#/components/schemas/RestCmHandle'
        removedCmHandles:
          type: array
          items:
            type: string

    RestCmHandle:
      required:
        - cmHandle
      type: object
      properties:
        cmHandle:
          type: string
          example: cmHandle123
        cmHandleProperties:
            $ref: '#/components/schemas/RestCmHandleAdditionalProperties'
    RestCmHandleAdditionalProperties:
        type: object
        additionalProperties:
            type: string
            example: system-001

  parameters:
    cmHandleInPath:
      name: cm-handle
      in: path
      description: The identifier for a network function, network element, subnetwork or any other cm object by managed Network CM Proxy
      required: true
      schema:
        type: string
    xpathInQuery:
      name: xpath
      in: query
      description: xpath
      required: false
      schema:
        type: string
        default: /
    requiredXpathInQuery:
      name: xpath
      in: query
      description: xpath
      required: true
      schema:
        type: string
    includeDescendantsOptionInQuery:
      name: include-descendants
      in: query
      description: include-descendants
      required: false
      schema:
        type: boolean
        default: false
    cpsPathInQuery:
      name: cps-path
      in: query
      description: cps-path
      required: false
      schema:
        type: string
        default: /
    resourceIdentifierInQuery:
      name: resourceIdentifier
      in: query
      description: The format of resource identifier depend on the associated DMI Plugin implementation. For ONAP DMI Plugin it will be RESTConf paths but it can really be anything.
      required: true
      allowReserved: true
      schema:
        type: string
      examples:
        sample1:
          value:
            resourceIdentifier: \parent\child
        sample2:
          value:
            resourceIdentifier: \parent\listElement[key=value]
        sample3:
          value:
            resourceIdentifier: \parent\listElement[key=value]\grandChild
        sample4:
          value:
            resourceIdentifier: parent=1,child=abc
    acceptParamInHeader:
      name: Accept
      in: header
      required: false
      description: Accept parameter for response, if accept parameter is null, that means client can accept any format.
      schema:
        type: string
        enum: [ application/json, application/yang-data+json ]
    fieldsParamInQuery:
      name: fields
      in: query
      description: Fields parameter to filter resource
      required: false
      schema:
        type: string
    depthParamInQuery:
      name: depth
      in: query
      description: Depth parameter for response
      required: false
      schema:
        type: integer
        minimum: 1
    contentParamInHeader:
      name: Content-Type
      in: header
      required: false
      description: Content parameter for request, if content parameter is null, default value is application/json.
      schema:
        type: string
        default: application/json


  responses:
    NotFound:
      description: The specified resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    Conflict:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    NotImplemented:
      description: The given path has not been implemented
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
    Ok:
      description: OK
      content:
        application/json:
          schema:
            type: object
    Created:
      description: Created
      content: {}
    NoContent:
      description: No Content
      content: {}