added test case to VlanTagTest.java
[ccsdk/apps.git] / components / core / src / main / kotlin / org / onap / ccsdk / apps / controllerblueprints / core / data / BluePrintModel.kt
1 /*\r
2  * Copyright © 2017-2018 AT&T Intellectual Property.\r
3  * Modifications Copyright © 2018 IBM.\r
4  *\r
5  * Licensed under the Apache License, Version 2.0 (the "License");\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  *\r
9  *     http://www.apache.org/licenses/LICENSE-2.0\r
10  *\r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an "AS IS" BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  */\r
17 \r
18 package org.onap.ccsdk.apps.controllerblueprints.core.data\r
19 \r
20 import com.fasterxml.jackson.annotation.JsonIgnore\r
21 import com.fasterxml.jackson.annotation.JsonProperty\r
22 import com.fasterxml.jackson.annotation.JsonPropertyOrder\r
23 import com.fasterxml.jackson.databind.JsonNode\r
24 import io.swagger.annotations.ApiModelProperty\r
25 \r
26 /**\r
27  *\r
28  *\r
29  * @author Brinda Santh\r
30  */\r
31 open class EntityType {\r
32     @get:JsonIgnore\r
33     var id: String? = null\r
34     var description: String? = null\r
35     var version: String = "1.0.0"\r
36     var metadata: MutableMap<String, String>? = null\r
37     @get:JsonProperty("derived_from")\r
38     lateinit var derivedFrom: String\r
39     var attributes: MutableMap<String, AttributeDefinition>? = null\r
40     var properties: MutableMap<String, PropertyDefinition>? = null\r
41 }\r
42 \r
43 /*\r
44  5.3.2 tosca.datatypes.Credential\r
45  The Credential type is a complex TOSCA data Type used when describing\r
46  authorization credentials used to access network accessible resources.\r
47  */\r
48 class Credential {\r
49     @get:JsonIgnore\r
50     var id: String? = null\r
51     var protocol: String? = null\r
52     @get:JsonProperty("token_type")\r
53     lateinit var tokenType: String\r
54     lateinit var token: String\r
55     var keys: MutableMap<String, String>? = null\r
56     lateinit var user: String\r
57 }\r
58 \r
59 /*\r
60 3.5.2 Constraint clause\r
61 A constraint clause defines an operation along with one or more compatible values that can be used to define a constraint on a property or parameter’s allowed values when it is defined in a TOSCA Service Template or one of its entities.\r
62  */\r
63 class ConstraintClause {\r
64     @get:JsonProperty("equal")\r
65     var equal: JsonNode? = null\r
66     @get:JsonProperty("greater_than")\r
67     var greaterThan: Any? = null\r
68     @get:JsonProperty("greater_or_equal")\r
69     var greaterOrEqual: Any? = null\r
70     @get:JsonProperty("less_than")\r
71     var lessThan: Any? = null\r
72     @get:JsonProperty("less_or_equal")\r
73     var lessOrEqual: Any? = null\r
74     @get:JsonProperty("in_range")\r
75     var inRange: Any? = null\r
76     @get:JsonProperty("valid_values")\r
77     var validValues: MutableList<JsonNode>? = null\r
78     @get:JsonProperty("length")\r
79     var length: Any? = null\r
80     @get:JsonProperty("min_length")\r
81     var minLength: Any? = null\r
82     @get:JsonProperty("max_length")\r
83     var maxLength: Any? = null\r
84     var pattern: String? = null\r
85     var schema: String? = null\r
86 }\r
87 \r
88 /*\r
89 3.5.4 Node Filter definition\r
90 A node filter definition defines criteria for selection of a TOSCA Node Template based upon the template’s property values, capabilities and capability properties.\r
91  */\r
92 \r
93 class NodeFilterDefinition {\r
94     var properties: MutableMap<String, PropertyDefinition>? = null\r
95     var capabilities: MutableList<String>? = null\r
96 }\r
97 \r
98 /*\r
99 3.5.5 Repository definition\r
100  A repository definition defines a named external repository which contains deployment\r
101  and implementation artifacts that are referenced within the TOSCA Service Template.\r
102 */\r
103 class RepositoryDefinition {\r
104     @get:JsonIgnore\r
105     var id: String? = null\r
106     var description: String? = null\r
107     lateinit var url: String\r
108     var credential: Credential? = null\r
109 }\r
110 \r
111 \r
112 /*\r
113 3.5.6 Artifact definition\r
114 An artifact definition defines a named, typed file that can be associated with Node Type\r
115 or Node Template and used by orchestration engine to facilitate deployment and implementation of interface operations.\r
116  */\r
117 class ArtifactDefinition {\r
118     @get:JsonIgnore\r
119     var id: String? = null\r
120     var type: String? = null\r
121     var file: String? = null\r
122     var repository: String? = null\r
123     var description: String? = null\r
124     @get:JsonProperty("deploy_Path")\r
125     var deployPath: String? = null\r
126     var properties: MutableMap<String, JsonNode>? = null\r
127     var content: String? = null\r
128     @Deprecated("Mapping content is define by the Type")\r
129     var mappingContent: String? = null\r
130 }\r
131 \r
132 \r
133 /*\r
134 3.5.7 Import definition\r
135 An import definition is used within a TOSCA Service Template to locate and uniquely name\r
136 another TOSCA Service Template file which has type and template definitions to be imported (included)\r
137 and referenced within another Service Template.\r
138  */\r
139 class ImportDefinition {\r
140     @get:JsonIgnore\r
141     var id: String? = null\r
142     lateinit var file: String\r
143     var repository: String? = null\r
144     @get:JsonProperty("namespace_uri")\r
145     var namespaceUri: String? = null\r
146     @get:JsonProperty("namespace_prefix")\r
147     var namespacePrefix: String? = null\r
148 }\r
149 \r
150 /*\r
151 3.5.8 Property definition A property definition defines a named, typed value and related data that can be associated with an\r
152 entity defined in this specification (e.g., Node Types, Relationship Types, Capability Types, etc.).\r
153 Properties are used by template authors to provide input values to TOSCA entities which indicate their “desired state” when they are\r
154 instantiated. The value of a property can be retrieved using the get_property function within TOSCA Service Templates.\r
155  */\r
156 class PropertyDefinition {\r
157     @get:JsonIgnore\r
158     var id: String? = null\r
159     var description: String? = null\r
160     var required: Boolean? = null\r
161     lateinit var type: String\r
162     @get:JsonProperty("default")\r
163     var defaultValue: JsonNode? = null\r
164     var status: String? = null\r
165     var constraints: MutableList<ConstraintClause>? = null\r
166     @get:JsonProperty("entry_schema")\r
167     var entrySchema: EntrySchema? = null\r
168     @get:ApiModelProperty(notes = "Property Value, It may be raw JSON or primitive data type values")\r
169     var value: JsonNode? = null\r
170 }\r
171 \r
172 \r
173 /*\r
174 3.5.10 Attribute definition\r
175 \r
176 An attribute definition defines a named, typed value that can be associated with an entity defined in this\r
177 specification (e.g., a Node, Relationship or Capability Type).  Specifically, it is used to expose the\r
178 “actual state” of some property of a TOSCA entity after it has been deployed and instantiated\r
179 (as set by the TOSCA orchestrator). Attribute values can be retrieved via the get_attribute function\r
180 from the instance model and used as values to other entities within TOSCA Service Templates.\r
181  */\r
182 \r
183 class AttributeDefinition {\r
184     @get:JsonIgnore\r
185     var id: String? = null\r
186     var description: String? = null\r
187     var required: Boolean? = null\r
188     lateinit var type: String\r
189     @JsonProperty("default")\r
190     var defaultValue: JsonNode? = null\r
191     var status: String? = null\r
192     var constraints: MutableList<ConstraintClause>? = null\r
193     @JsonProperty("entry_schema")\r
194     var entrySchema: EntrySchema? = null\r
195 }\r
196 \r
197 /*\r
198 3.5.13 Operation definition\r
199 An operation definition defines a named function or procedure that can be bound to an implementation artifact (e.g., a script).\r
200  */\r
201 class OperationDefinition {\r
202     @get:JsonIgnore\r
203     var id: String? = null\r
204     var description: String? = null\r
205     var implementation: Implementation? = null\r
206     var inputs: MutableMap<String, PropertyDefinition>? = null\r
207     var outputs: MutableMap<String, PropertyDefinition>? = null\r
208 }\r
209 \r
210 class Implementation {\r
211     lateinit var primary: String\r
212     var dependencies: MutableList<String>? = null\r
213 }\r
214 \r
215 /*\r
216 3.5.14 Interface definition\r
217 An interface definition defines a named interface that can be associated with a Node or Relationship Type\r
218  */\r
219 class InterfaceDefinition {\r
220     @get:JsonIgnore\r
221     var id: String? = null\r
222     var type: String? = null\r
223     var operations: MutableMap<String, OperationDefinition>? = null\r
224     var inputs: MutableMap<String, PropertyDefinition>? = null\r
225 }\r
226 \r
227 /*\r
228 3.5.15 Event Filter definition\r
229 An event filter definition defines criteria for selection of an attribute, for the purpose of monitoring it, within a TOSCA entity, or one its capabilities.\r
230  */\r
231 class EventFilterDefinition {\r
232     @get:JsonIgnore\r
233     var id: String? = null\r
234     lateinit var node: String\r
235     var requirement: String? = null\r
236     var capability: String? = null\r
237 }\r
238 \r
239 /*\r
240 3.5.16 Trigger definition TODO\r
241 A trigger definition defines the event, condition and action that is used to “trigger” a policy it is associated with.\r
242  */\r
243 class TriggerDefinition {\r
244     @get:JsonIgnore\r
245     var id: String? = null\r
246     var description: String? = null\r
247     @get:JsonProperty("event_type")\r
248     lateinit var eventType: String\r
249     @get:JsonProperty("target_filter")\r
250     var targetFilter: EventFilterDefinition? = null\r
251     var condition: ConditionClause? = null\r
252     var constraint: ConditionClause? = null\r
253     var method: String? = null\r
254     lateinit var action: String\r
255 }\r
256 \r
257 /*\r
258     3.5.17 Workflow activity definition\r
259     A workflow activity defines an operation to be performed in a TOSCA workflow. Activities allows to:\r
260     · Delegate the workflow for a node expected to be provided         by the orchestrator\r
261     · Set the state of a node\r
262     · Call an operation        defined on a TOSCA interface of a node, relationship or group\r
263     · Inline another workflow defined in the topology (to allow reusability)\r
264  */\r
265 class Activity {\r
266     var delegate: String? = null\r
267     @get:JsonProperty("set_state")\r
268     var setState: String? = null\r
269     @get:JsonProperty("call_operation")\r
270     var callOperation: String? = null\r
271     var inlines: ArrayList<String>? = null\r
272 }\r
273 \r
274 /*\r
275 3.5.20 Workflow precondition definition\r
276 A workflow condition can be used as a filter or precondition to check if a workflow can be processed or not based on the state of the instances of a TOSCA topology deployment. When not met, the workflow will not be triggered.\r
277  */\r
278 class PreConditionDefinition {\r
279     @get:JsonIgnore\r
280     var id: String? = null\r
281     lateinit var target: String\r
282     @get:JsonProperty("target_relationship")\r
283     lateinit var targetRelationship: String\r
284     lateinit var condition: ArrayList<ConditionClause>\r
285 }\r
286 \r
287 /*\r
288 3.5.21 Workflow step definition\r
289 A workflow step allows to define one or multiple sequenced activities in a workflow and how they are connected to other steps in the workflow. They are the building blocks of a declarative workflow.\r
290  */\r
291 class Step {\r
292     @get:JsonIgnore\r
293     var id: String? = null\r
294     var description: String? = null\r
295     var target: String? = null\r
296     @JsonProperty("target_relationship")\r
297     var targetRelationship: String? = null\r
298     @JsonProperty("operation_host")\r
299     var operationHost: String? = null\r
300     var activities: ArrayList<Activity>? = null\r
301     @get:JsonProperty("on_success")\r
302     var onSuccess: ArrayList<String>? = null\r
303     @get:JsonProperty("on_failure")\r
304     var onFailure: ArrayList<String>? = null\r
305 }\r
306 \r
307 /*\r
308 3.6.2 Capability definition\r
309 A capability definition defines a named, typed set of data that can be associated with Node Type or Node Template to describe a transparent capability or feature of the software component the node describes.\r
310  */\r
311 \r
312 class CapabilityDefinition {\r
313     @get:JsonIgnore\r
314     var id: String? = null\r
315     lateinit var type: String\r
316     var description: String? = null\r
317     var properties: MutableMap<String, PropertyDefinition>? = null\r
318     @get:JsonProperty("valid_source_types")\r
319     var validSourceTypes: MutableList<String>? = null\r
320     var occurrences: MutableList<Any>? = null\r
321 }\r
322 \r
323 /*\r
324 3.6.3 Requirement definition\r
325 The Requirement definition describes a named requirement (dependencies) of a TOSCA Node Type or Node template which needs to be fulfilled by a matching Capability definition declared by another TOSCA modelable entity.  The requirement definition may itself include the specific name of the fulfilling entity (explicitly) or provide an abstract type, along with additional filtering characteristics, that a TOSCA orchestrator can use to fulfill the capability at runtime (implicitly).\r
326  */\r
327 class RequirementDefinition {\r
328     @get:JsonIgnore\r
329     var id: String? = null\r
330     var description: String? = null\r
331     var capability: String? = null\r
332     var node: String? = null\r
333     var relationship: String? = null\r
334     var occurrences: MutableList<Any>? = null\r
335 }\r
336 \r
337 /*\r
338 3.6.4 Artifact Type\r
339 An Artifact Type is a reusable entity that defines the type of one or more files that are used to define implementation or deployment artifacts that are referenced by nodes or relationships on their operations.\r
340  */\r
341 class ArtifactType : EntityType() {\r
342     @get:JsonProperty("mime_type")\r
343     var mimeType: String? = null\r
344     @get:JsonProperty("file_ext")\r
345     var fileExt: MutableList<String>? = null\r
346 \r
347 }\r
348 \r
349 /*\r
350 3.6.6 Data Type\r
351 A Data Type definition defines the schema for new named datatypes in TOSCA.\r
352  */\r
353 \r
354 class DataType : EntityType() {\r
355     var constraints: MutableList<ConstraintClause>? = null\r
356 }\r
357 \r
358 /*\r
359 3.6.9 Node Type\r
360 A Node Type is a reusable entity that defines the type of one or more Node Templates. As such, a Node Type defines the structure of observable properties via a Properties Definition, the Requirements and Capabilities of the node as well as its supported interfaces.\r
361 \r
362  */\r
363 \r
364 class NodeType : EntityType() {\r
365     var capabilities: MutableMap<String, CapabilityDefinition>? = null\r
366     var requirements: MutableMap<String, RequirementDefinition>? = null\r
367     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
368     var artifacts: MutableMap<String, ArtifactDefinition>? = null\r
369 }\r
370 \r
371 /*\r
372 3.6.8 Requirement Type\r
373 A Requirement Type is a reusable entity that describes a kind of requirement that a Node Type can declare to expose.  The TOSCA Simple Profile seeks to simplify the need for declaring specific Requirement Types from nodes and instead rely upon nodes declaring their features sets using TOSCA Capability Types along with a named Feature notation.\r
374  */\r
375 \r
376 class RequirementType : EntityType() {\r
377     var requirements: MutableMap<String, RequirementDefinition>? = null\r
378     var capabilities: MutableMap<String, CapabilityDefinition>? = null\r
379     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
380     var artifacts: MutableMap<String, ArtifactDefinition>? = null\r
381 }\r
382 \r
383 /*\r
384 3.6.10 Relationship Type\r
385 A Relationship Type is a reusable entity that defines the type of one or more relationships between Node Types or Node Templates.\r
386 */\r
387 \r
388 class RelationshipType : EntityType() {\r
389     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
390     @get:JsonProperty("valid_target_types")\r
391     var validTargetTypes: ArrayList<String>? = null\r
392 }\r
393 \r
394 /*\r
395 3.6.11 Group Type\r
396 A Group Type defines logical grouping types for nodes, typically for different management purposes.\r
397 Groups can effectively be viewed as logical nodes that are not part of the physical deployment topology\r
398  of an application, yet can have capabilities and the ability to attach policies and interfaces\r
399  that can be applied (depending on the group type) to its member nodes.\r
400  */\r
401 \r
402 class GroupType : EntityType() {\r
403     var members: MutableList<String>? = null\r
404     var requirements: ArrayList<RequirementDefinition>? = null\r
405     var capabilities: MutableMap<String, CapabilityDefinition>? = null\r
406     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
407 \r
408 }\r
409 \r
410 /*\r
411     3.6.12 Policy Type\r
412     A Policy Type defines a type of requirement that affects or governs an application or service’s\r
413     topology at some stage of its lifecycle, but is not explicitly part of the topology itself\r
414     (i.e., it does not prevent the application or service from being deployed or run if it did not exist).\r
415  */\r
416 class PolicyType : EntityType() {\r
417     lateinit var targets: MutableList<String>\r
418 }\r
419 \r
420 /*\r
421 3.7.1 Capability assignment\r
422 A capability assignment allows node template authors to assign values to properties and attributes for a named capability definition that is part of a Node Template’s type definition.\r
423  */\r
424 class CapabilityAssignment {\r
425     @get:JsonIgnore\r
426     var id: String? = null\r
427     var attributes: MutableMap<String, JsonNode>? = null\r
428     var properties: MutableMap<String, JsonNode>? = null\r
429 }\r
430 \r
431 /*\r
432 3.7.4 Relationship Template\r
433 A Relationship Template specifies the occurrence of a manageable relationship between node templates as part of an application’s topology model that is defined in a TOSCA Service Template.  A Relationship template is an instance of a specified Relationship Type and can provide customized properties, constraints or operations which override the defaults provided by its Relationship Type and its implementations.\r
434  */\r
435 class GroupDefinition {\r
436     @get:JsonIgnore\r
437     var id: String? = null\r
438     lateinit var type: String\r
439     var description: String? = null\r
440     var metadata: MutableMap<String, String>? = null\r
441     var properties: MutableMap<String, JsonNode>? = null\r
442     var members = ArrayList<String>()\r
443     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
444 }\r
445 \r
446 /*\r
447 3.7.6 Policy definition\r
448 A policy definition defines a policy that can be associated with a TOSCA topology or top-level entity definition (e.g., group definition, node template, etc.).\r
449  */\r
450 class PolicyDefinition {\r
451     @get:JsonIgnore\r
452     var id: String? = null\r
453     lateinit var type: String\r
454     var description: String? = null\r
455     var metadata: MutableMap<String, String>? = null\r
456     var properties: MutableMap<String, JsonNode>? = null\r
457     var targets: MutableList<String>? = null\r
458 }\r
459 \r
460 \r
461 /*\r
462 3.8 Topology Template definition\r
463 This section defines the topology template of a cloud application. The main ingredients of the topology template are node templates representing components of the application and relationship templates representing links between the components. These elements are defined in the nested node_templates section and the nested relationship_templates sections, respectively.  Furthermore, a topology template allows for defining input parameters, output parameters as well as grouping of node templates.\r
464  */\r
465 class TopologyTemplate {\r
466     @get:JsonIgnore\r
467     var id: String? = null\r
468     var description: String? = null\r
469     var inputs: MutableMap<String, PropertyDefinition>? = null\r
470     @get:JsonProperty("node_templates")\r
471     var nodeTemplates: MutableMap<String, NodeTemplate>? = null\r
472     @get:JsonProperty("relationship_templates")\r
473     var relationshipTemplates: MutableMap<String, RelationshipTemplate>? = null\r
474     var policies: MutableMap<String, PolicyDefinition>? = null\r
475     var outputs: MutableMap<String, PropertyDefinition>? = null\r
476     @get:JsonProperty("substitution_mappings")\r
477     var substitutionMappings: Any? = null\r
478     var workflows: MutableMap<String, Workflow>? = null\r
479 }\r
480 \r
481 class SubstitutionMapping {\r
482     @get:JsonProperty("node_type")\r
483     lateinit var nodeType: String\r
484     lateinit var capabilities: ArrayList<String>\r
485     lateinit var requirements: ArrayList<String>\r
486 }\r
487 \r
488 class EntrySchema {\r
489     lateinit var type: String\r
490     var constraints: MutableList<ConstraintClause>? = null\r
491 }\r
492 \r
493 class InterfaceAssignment {\r
494     @get:JsonIgnore\r
495     var id: String? = null\r
496     var operations: MutableMap<String, OperationAssignment>? = null\r
497     var inputs: MutableMap<String, JsonNode>? = null\r
498 }\r
499 \r
500 /*\r
501 3.7.3 Node Template\r
502 A Node Template specifies the occurrence of a manageable software component as part of an application’s topology model which is defined in a TOSCA Service Template.  A Node template is an instance of a specified Node Type and can provide customized properties, constraints or operations which override the defaults provided by its Node Type and its implementations.\r
503  */\r
504 \r
505 class NodeTemplate {\r
506     @get:JsonIgnore\r
507     var id: String? = null\r
508     var description: String? = null\r
509     lateinit var type: String\r
510     var metadata: MutableMap<String, String>? = null\r
511     var directives: MutableList<String>? = null\r
512     //@get:JsonSerialize(using = PropertyDefinitionValueSerializer::class)\r
513     var properties: MutableMap<String, JsonNode>? = null\r
514     var attributes: MutableMap<String, JsonNode>? = null\r
515     var capabilities: MutableMap<String, CapabilityAssignment>? = null\r
516     var requirements: MutableMap<String, RequirementAssignment>? = null\r
517     var interfaces: MutableMap<String, InterfaceAssignment>? = null\r
518     var artifacts: MutableMap<String, ArtifactDefinition>? = null\r
519     @get:JsonProperty("node_filter")\r
520     var nodeFilter: NodeFilterDefinition? = null\r
521     var copy: String? = null\r
522 }\r
523 \r
524 class OperationAssignment {\r
525     @get:JsonIgnore\r
526     var id: String? = null\r
527     var description: String? = null\r
528     var implementation: Implementation? = null\r
529     var inputs: MutableMap<String, JsonNode>? = null\r
530     var outputs: MutableMap<String, JsonNode>? = null\r
531 }\r
532 \r
533 /*\r
534 3.7.4 Relationship Template\r
535 A Relationship Template specifies the occurrence of a manageable relationship between node templates as part of an application’s topology model that is defined in a TOSCA Service Template.  A Relationship template is an instance of a specified Relationship Type and can provide customized properties, constraints or operations which override the defaults provided by its Relationship Type and its implementations.\r
536  */\r
537 \r
538 class RelationshipTemplate {\r
539     var type: String? = null\r
540     var description: String? = null\r
541     var metadata: MutableMap<String, String>? = null\r
542     var properties: MutableMap<String, PropertyDefinition>? = null\r
543     var attributes: MutableMap<String, JsonNode>? = null\r
544     var interfaces: MutableMap<String, InterfaceDefinition>? = null\r
545     var copy: String? = null\r
546 }\r
547 \r
548 /*\r
549 3.7.2 Requirement assignment\r
550 A Requirement assignment allows template authors to provide either concrete names of TOSCA templates or provide abstract selection criteria for providers to use to find matching TOSCA templates that are used to fulfill a named requirement’s declared TOSCA Node Type.\r
551  */\r
552 \r
553 class RequirementAssignment {\r
554     @get:JsonIgnore\r
555     var id: String? = null\r
556     var capability: String? = null\r
557     var node: String? = null\r
558     //Relationship Type or Relationship Template\r
559     var relationship: String? = null\r
560 }\r
561 \r
562 \r
563 class Workflow {\r
564     @get:JsonIgnore\r
565     var id: String? = null\r
566     var description: String? = null\r
567     var steps: MutableMap<String, Step>? = null\r
568     var preconditions: ArrayList<PreConditionDefinition>? = null\r
569     var inputs: MutableMap<String, PropertyDefinition>? = null\r
570 }\r
571 \r
572 \r
573 class ConditionClause {\r
574     var and: ArrayList<MutableMap<String, Any>>? = null\r
575     var or: ArrayList<MutableMap<String, Any>>? = null\r
576     @get:JsonProperty("assert")\r
577     var assertConditions: ArrayList<MutableMap<String, Any>>? = null\r
578 }\r
579 \r
580 /*\r
581 3.9 Service Template definition\r
582 A TOSCA Service Template (YAML) document contains element definitions of building blocks for cloud application, or complete models of cloud applications. This section describes the top-level structural elements (TOSCA keynames) along with their grammars, which are allowed to appear in a TOSCA Service Template document.\r
583  */\r
584 \r
585 @JsonPropertyOrder(value = ["toscaDefinitionsVersion", "description", "metadata", "imports", "topologyTemplate"])\r
586 class ServiceTemplate : Cloneable {\r
587     @get:JsonIgnore\r
588     var id: String? = null\r
589     @get:JsonProperty("tosca_definitions_version")\r
590     var toscaDefinitionsVersion: String = "controller_blueprint_1_0_0"\r
591     var metadata: MutableMap<String, String>? = null\r
592     var description: String? = null\r
593     @get:JsonProperty("dsl_definitions")\r
594     var dslDefinitions: MutableMap<String, Any>? = null\r
595     var repositories: MutableMap<String, RepositoryDefinition>? = null\r
596     var imports: MutableList<ImportDefinition>? = null\r
597     @get:JsonProperty("artifact_types")\r
598     var artifactTypes: MutableMap<String, ArtifactType>? = null\r
599     @get:JsonProperty("data_types")\r
600     var dataTypes: MutableMap<String, DataType>? = null\r
601     @get:JsonProperty("relationship_types")\r
602     var relationshipTypes: MutableMap<String, RelationshipType>? = null\r
603     @get:JsonProperty("node_types")\r
604     var nodeTypes: MutableMap<String, NodeType>? = null\r
605     @get:JsonProperty("policy_types")\r
606     var policyTypes: MutableMap<String, PolicyType>? = null\r
607     @get:JsonProperty("topology_template")\r
608     var topologyTemplate: TopologyTemplate? = null\r
609 \r
610     override public fun clone(): ServiceTemplate {\r
611         return super.clone() as ServiceTemplate\r
612     }\r
613 }\r
614 \r
615 class ToscaMetaData {\r
616     lateinit var toscaMetaFileVersion: String\r
617     lateinit var csarVersion: String\r
618     lateinit var createdBy: String\r
619     lateinit var entityDefinitions: String\r
620     var templateTags: String? = null\r
621 }\r
622 \r