/
relations.ftl
120 lines (93 loc) · 5.47 KB
/
relations.ftl
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
${editWarning}
package ${packageName}
import com.vmware.o11n.sdk.modeldriven.ObjectRelater
import com.vmware.o11n.sdk.modeldriven.PluginContext
import com.vmware.o11n.sdk.modeldriven.Sid
import org.springframework.beans.factory.annotation.Autowired
import net.juniper.contrail.api.* // ktlint-disable no-wildcard-imports
import net.juniper.contrail.api.types.* // ktlint-disable no-wildcard-imports
import net.juniper.contrail.vro.base.ConnectionRepository
import net.juniper.contrail.vro.config.* // ktlint-disable no-wildcard-imports
import net.juniper.contrail.vro.model.Connection
private val rootObject: (ApiObjectBase) -> Boolean =
{ it.parentType == null || it.parentType == "domain" || it.parentType == "config-root" }
<#list rootClasses as rootClass>
class ConnectionHas${rootClass.simpleName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${rootClass.simpleName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${rootClass.simpleName}>? =
connections.getConnection(parentId)?.run {
list<${rootClass.simpleName}>()?.onEach { read(it) }?.filter(rootObject)
}
}
</#list>
<#list relations as relation>
class ${relation.parentName}Has${relation.childName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${relation.childName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${relation.childName}>? {
val connection = connections.getConnection(parentId)
val parent = connection?.findById<${relation.parentName}>(parentId.getString("${relation.parentPluginName}"))
return connection?.getObjects(${relation.childName}::class.java, parent?.${relation.childNameDecapitalized}s)
}
}
</#list>
<#list securityClasses as klass>
class ProjectHasDraft${klass.simpleName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${klass.simpleName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${klass.simpleName}>? {
val connection = connections.getConnection(parentId)
val parentProject = connection?.findById<Project>(parentId.getString("Project"))
val draftFqn = parentProject?.qualifiedName?.plus("draft-policy-management")?.joinToString(":")
val parent = draftFqn?.run {
connection.findByFQN<PolicyManagement>(this)
}
return connection?.getObjects(${klass.simpleName}::class.java, parent?.${klass.simpleNameDecapitalized}s)
}
}
class GlobalSecurityHas${klass.simpleName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${klass.simpleName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${klass.simpleName}>? {
val connection = connections.getConnection(parentId)
val parent = connection?.findByFQN<PolicyManagement>("default-policy-management")
return connection?.getObjects(${klass.simpleName}::class.java, parent?.${klass.simpleNameDecapitalized}s)
}
}
class GlobalDraftSecurityHas${klass.simpleName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${klass.simpleName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${klass.simpleName}>? {
val connection = connections.getConnection(parentId)
val parent = connection?.findByFQN<PolicyManagement>("draft-policy-management")
return connection?.getObjects(${klass.simpleName}::class.java, parent?.${klass.simpleNameDecapitalized}s)
}
}
</#list>
class ProjectHasDraftSecurity: ObjectRelater<DraftSecurity> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<DraftSecurity> =
listOf(DraftSecurity)
}
<#list categories as category>
class ${category.parentName}Has${category.name}: ObjectRelater<${category.name}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${category.name}> =
listOf(${category.name})
}
</#list>
<#list forwardRelations as relation>
class ${relation.parentName}To${relation.childName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${relation.childName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${relation.childName}>? {
val connection = connections.getConnection(parentId)
val parent = connection?.findById(${relation.parentName}::class.java, parentId.getString("${relation.parentPluginName}"))
return connection?.getObjects(${relation.childName}::class.java, parent?.${relation.getter})
}
}
</#list>
<#list propertyRelations as relation>
class ${relation.parentName}Has${relation.childName}
@Autowired constructor(private val connections: ConnectionRepository) : ObjectRelater<${relation.childName}> {
override fun findChildren(ctx: PluginContext, relation: String, parentType: String, parentId: Sid): List<${relation.childName}>? {
val connection = connections.getConnection(parentId)
val parent = connection?.findById(${relation.parentName}::class.java, parentId.getString("${relation.parentPluginName}"))
val child = parent?.${relation.propertyName} ?: return null
return listOf(child)
}
}
</#list>