Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / asdc / parser / ServiceModelInflator.kt
1 package org.onap.vid.asdc.parser
2
3 import org.onap.vid.model.*
4 import org.springframework.stereotype.Component
5
6 @Component
7 class ServiceModelInflator {
8
9     data class Names (val modelCustomizationName: String?, val modelKey: String?)
10
11     fun toNamesByVersionId(model: ServiceModel): Map<String, Names> {
12         return emptyMap<String, Names>()
13                 .plus(inflate(model.networks))
14                 .plus(inflate(model.vnfs))
15                 .plus(inflate(model.vnfGroups))
16     }
17
18     private fun inflate(instances: Map<String, *>): Map<String, Names> {
19         return instances.entries.map { inflate(it.key, it.value) }.fold(emptyMap()) { acc, it -> acc.plus(it) }
20     }
21
22     private fun inflate(modelKey: String, vnf: VNF): Map<String, Names> {
23         return mapOf(vnf.uuid to Names(vnf.modelCustomizationName, modelKey))
24                 .plus(inflate(vnf.vfModules))
25                 .plus(inflate(vnf.volumeGroups))
26     }
27
28     private fun inflate(modelKey: String, instance: Any?): Map<String, Names> {
29         return when (instance) {
30             is Network -> mapOf(instance.uuid to Names(instance.modelCustomizationName, modelKey))
31             is VfModule -> mapOf(instance.uuid to Names(instance.modelCustomizationName, modelKey))
32             is VolumeGroup -> mapOf(instance.uuid to Names(instance.modelCustomizationName, modelKey))
33             is ResourceGroup -> mapOf(instance.uuid to Names(instance.modelCustomizationName, modelKey))
34             is VNF -> inflate(modelKey, instance)
35
36             else -> {
37                 // sink
38                 emptyMap()
39             }
40         }
41     }
42
43 }