|
13 | 13 | */
|
14 | 14 | package org.modelix.model.mpsadapters
|
15 | 15 |
|
| 16 | +import jetbrains.mps.project.ProjectBase |
| 17 | +import jetbrains.mps.project.ProjectManager |
| 18 | +import jetbrains.mps.smodel.tempmodel.TempModule |
| 19 | +import jetbrains.mps.smodel.tempmodel.TempModule2 |
| 20 | +import org.jetbrains.mps.openapi.module.SModule |
16 | 21 | import org.jetbrains.mps.openapi.module.SRepository
|
17 | 22 | import org.modelix.model.api.BuiltinLanguages
|
18 | 23 | import org.modelix.model.api.IChildLink
|
19 | 24 | import org.modelix.model.api.IConcept
|
20 |
| -import org.modelix.model.api.IConceptReference |
21 |
| -import org.modelix.model.api.IDeprecatedNodeDefaults |
22 | 25 | import org.modelix.model.api.INode
|
23 | 26 | import org.modelix.model.api.INodeReference
|
24 |
| -import org.modelix.model.api.IProperty |
25 |
| -import org.modelix.model.api.IReferenceLink |
26 | 27 | import org.modelix.model.api.NodeReference
|
27 | 28 | import org.modelix.model.api.NullChildLink
|
28 | 29 | import org.modelix.model.area.IArea
|
29 | 30 |
|
30 |
| -data class MPSRepositoryAsNode(val repository: SRepository) : IDeprecatedNodeDefaults { |
| 31 | +data class MPSRepositoryAsNode(val repository: SRepository) : IDefaultNodeAdapter { |
| 32 | + |
31 | 33 | override fun getArea(): IArea {
|
32 | 34 | return MPSArea(repository)
|
33 | 35 | }
|
34 | 36 |
|
35 |
| - override val isValid: Boolean |
36 |
| - get() = TODO("Not yet implemented") |
37 | 37 | override val reference: INodeReference
|
38 | 38 | get() = NodeReference("mps-repository")
|
39 | 39 | override val concept: IConcept
|
40 | 40 | get() = BuiltinLanguages.MPSRepositoryConcepts.Repository
|
41 | 41 | override val parent: INode?
|
42 | 42 | get() = null
|
43 | 43 |
|
44 |
| - override fun getConceptReference(): IConceptReference? { |
45 |
| - return concept.getReference() |
46 |
| - } |
47 |
| - |
48 | 44 | override val allChildren: Iterable<INode>
|
49 | 45 | get() = repository.modules.map { MPSModuleAsNode(it) }
|
50 | 46 |
|
51 |
| - override fun removeChild(child: INode) { |
52 |
| - TODO("Not yet implemented") |
53 |
| - } |
54 |
| - |
55 | 47 | override fun getContainmentLink(): IChildLink? {
|
56 | 48 | return null
|
57 | 49 | }
|
58 | 50 |
|
59 | 51 | override fun getChildren(link: IChildLink): Iterable<INode> {
|
60 | 52 | return if (link is NullChildLink) {
|
61 | 53 | return emptyList()
|
62 |
| - } else if (link.getUID().endsWith("0a7577d1-d4e5-431d-98b1-fae38f9aee80/474657388638618902/474657388638618903") || |
63 |
| - link.getUID().contains("modules") || |
64 |
| - link.getSimpleName() == "modules" |
65 |
| - ) { |
66 |
| - repository.modules.map { MPSModuleAsNode(it) } |
| 54 | + } else if (link.conformsTo(BuiltinLanguages.MPSRepositoryConcepts.Repository.modules)) { |
| 55 | + repository.modules.filter { !it.isTempModule() }.map { MPSModuleAsNode(it) } |
| 56 | + } else if (link.conformsTo(BuiltinLanguages.MPSRepositoryConcepts.Repository.projects)) { |
| 57 | + ProjectManager.getInstance().openedProjects |
| 58 | + .filterIsInstance<ProjectBase>() |
| 59 | + .map { MPSProjectAsNode(it) } |
| 60 | + } else if (link.conformsTo(BuiltinLanguages.MPSRepositoryConcepts.Repository.tempModules)) { |
| 61 | + repository.modules.filter { it.isTempModule() }.map { MPSModuleAsNode(it) } |
67 | 62 | } else {
|
68 | 63 | emptyList()
|
69 | 64 | }
|
70 | 65 | }
|
71 |
| - |
72 |
| - override fun moveChild(role: IChildLink, index: Int, child: INode) { |
73 |
| - TODO("Not yet implemented") |
74 |
| - } |
75 |
| - |
76 |
| - override fun addNewChild(role: IChildLink, index: Int, concept: IConcept?): INode { |
77 |
| - TODO("Not yet implemented") |
78 |
| - } |
79 |
| - |
80 |
| - override fun addNewChild(role: IChildLink, index: Int, concept: IConceptReference?): INode { |
81 |
| - TODO("Not yet implemented") |
82 |
| - } |
83 |
| - |
84 |
| - override fun getReferenceTarget(link: IReferenceLink): INode? { |
85 |
| - return null |
86 |
| - } |
87 |
| - |
88 |
| - override fun setReferenceTarget(link: IReferenceLink, target: INode?) { |
89 |
| - if (target != null) { |
90 |
| - throw IllegalArgumentException("$concept doesn't contain a reference link $link") |
91 |
| - } |
92 |
| - } |
93 |
| - |
94 |
| - override fun setReferenceTarget(role: IReferenceLink, target: INodeReference?) { |
95 |
| - if (target != null) { |
96 |
| - throw IllegalArgumentException("$concept doesn't contain a reference link $role") |
97 |
| - } |
98 |
| - } |
99 |
| - |
100 |
| - override fun getReferenceTargetRef(role: IReferenceLink): INodeReference? { |
101 |
| - return null |
102 |
| - } |
103 |
| - |
104 |
| - override fun getPropertyValue(property: IProperty): String? { |
105 |
| - return null |
106 |
| - } |
107 |
| - |
108 |
| - override fun setPropertyValue(property: IProperty, value: String?) { |
109 |
| - if (value != null) { |
110 |
| - throw IllegalArgumentException("$concept doesn't contain a property $property") |
111 |
| - } |
112 |
| - } |
113 |
| - |
114 |
| - override fun getPropertyLinks(): List<IProperty> { |
115 |
| - return emptyList() // A repository has no properties |
116 |
| - } |
117 |
| - |
118 |
| - override fun getReferenceLinks(): List<IReferenceLink> { |
119 |
| - return emptyList() // A repository has no references |
120 |
| - } |
121 | 66 | }
|
| 67 | + |
| 68 | +private fun SModule.isTempModule(): Boolean = this is TempModule || this is TempModule2 |
0 commit comments