aboutsummaryrefslogtreecommitdiffstats
path: root/ms/blueprintsprocessor/modules/blueprints/resource-dict/src/main/kotlin/org/onap/ccsdk/cds/controllerblueprints/resource/dict/ResourceDefinition.kt
blob: 50330fa68a28881d533a3aa7fdded4b57ffe2f9b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
 *  Copyright © 2018 IBM.
 *  Modifications Copyright © 2017-2018 AT&T Intellectual Property.
 *
 *  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.
 */

package org.onap.ccsdk.cds.controllerblueprints.resource.dict

import com.fasterxml.jackson.annotation.JsonFormat
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.JsonNode
import io.swagger.annotations.ApiModel
import io.swagger.annotations.ApiModelProperty
import org.onap.ccsdk.cds.controllerblueprints.core.data.NodeTemplate
import org.onap.ccsdk.cds.controllerblueprints.core.data.PropertyDefinition
import java.io.Serializable
import java.util.Date

@ApiModel
open class ResourceDefinition {

    @JsonProperty(value = "name", required = true)
    @ApiModelProperty(value = "Name", required = true, example = "\"default-source\"")
    lateinit var name: String

    @JsonProperty(value = "property", required = true)
    @ApiModelProperty(value = "Property", required = true)
    lateinit var property: PropertyDefinition

    var tags: String? = null

    /** The default group for Resource Definition is "default" */
    @JsonProperty(value = "group", required = true)
    @ApiModelProperty(value = "Group", required = true, example = "\"default\"")
    var group: String = "default"

    @JsonProperty(value = "updated-by")
    @ApiModelProperty(value = "Updated by", required = true, example = "\"example@onap.com\"")
    lateinit var updatedBy: String

    @JsonProperty(value = "sources", required = true)
    @ApiModelProperty(value = "Sources", required = true, example = "\"sources\"")
    lateinit var sources: MutableMap<String, NodeTemplate>
}

open class ResourceAssignment {

    @JsonProperty(value = "name", required = true)
    lateinit var name: String

    @JsonProperty(value = "property")
    var property: PropertyDefinition? = null

    @JsonProperty(value = "max-occurrence")
    var maxOccurrence: Int? = null

    @JsonProperty("input-param")
    var inputParameter: Boolean = false

    @JsonProperty("dictionary-name")
    var dictionaryName: String? = null

    @JsonProperty("dictionary-source")
    var dictionarySource: String? = null

    /** Modified Source definition,  Capability Source will use for script reference changes,
     * Rest Source will use for extra headers etc **/
    @JsonProperty("dictionary-source-definition")
    var dictionarySourceDefinition: NodeTemplate? = null

    /** Duplicate field : Shall be used directly from Dictionary Source definition dependencies. **/
    @JsonProperty("dependencies")
    var dependencies: MutableList<String>? = null

    @JsonProperty("templating-constants")
    var templatingConstants: MutableMap<String, String>? = null

    @JsonProperty("version")
    var version: Int = 0

    @JsonProperty("status")
    var status: String? = null

    @JsonProperty("message")
    var message: String? = null

    @JsonProperty("updated-date")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    var updatedDate: Date? = null

    @JsonProperty("updated-by")
    var updatedBy: String? = null

    /** input & output key-mapping with their resolved values **/
    var keyIdentifiers: MutableList<KeyIdentifier> = mutableListOf()

    override fun toString(): String {
        return """
            [
                name = $name
                status = $status
                required = ${property?.required}
                dependencies = $dependencies
                dictionaryName = $dictionaryName
                dictionarySource = $dictionarySource
            ]
        """.trimIndent()
    }
}

data class KeyIdentifier(val name: String, val value: JsonNode)
data class DictionaryMetadataEntry(val name: String, val value: String)

/**
 * Data class for exposing summary of resource resolution
 */
data class ResolutionSummary(
    val name: String,
    val value: JsonNode,
    val required: Boolean,
    val type: String,
    @JsonProperty("key-identifiers")
    val keyIdentifiers: MutableList<KeyIdentifier>,
    @JsonProperty("dictionary-description")
    val dictionaryDescription: String,
    @JsonProperty("dictionary-metadata")
    val dictionaryMetadata: MutableList<DictionaryMetadataEntry>,
    @JsonProperty("dictionary-name")
    val dictionaryName: String,
    @JsonProperty("dictionary-source")
    val dictionarySource: String,
    @JsonProperty("request-payload")
    val requestPayload: JsonNode,
    @JsonProperty("status")
    val status: String,
    @JsonProperty("message")
    val message: String
)

/**
 * Interface for Source Definitions (ex Input Source,
 * Default Source, Database Source, Rest Sources, etc)
 */
interface ResourceSource : Serializable

open class ResourceSourceMapping {

    lateinit var resourceSourceMappings: MutableMap<String, String>
}