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