Skip to content

Commit 8adccd3

Browse files
committed
feat(metamodel-export): serialize annotations on concept nodes into the metamodel json
1 parent 764f924 commit 8adccd3

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

metamodel-export/src/main/kotlin/org/modelix/metamodel/export/MPSMetaModelExporter.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ class MPSMetaModelExporter(private val outputFolder: File) {
113113
}
114114
fqName(it)
115115
}
116+
val smodelAttributes = SNodeOperations
117+
.getChildren(concept, LINKS.smodelAttribute)
118+
.map(MPSModelExporter::exportNode)
116119
val metaProperties: MutableMap<String, String> = HashMap()
117120
if (SPropertyOperations.getString(concept, PROPS.conceptAlias) != null) {
118121
metaProperties[ConceptData.ALIAS_KEY] =
@@ -127,6 +130,7 @@ class MPSMetaModelExporter(private val outputFolder: File) {
127130
referenceLinks,
128131
superConcepts,
129132
deprecationMsg(concept),
133+
smodelAttributes,
130134
metaProperties,
131135
)
132136
}
@@ -295,6 +299,13 @@ class MPSMetaModelExporter(private val outputFolder: File) {
295299
0xeeb344f63fe016cL,
296300
"defaultMember",
297301
)
302+
val smodelAttribute: SContainmentLink = MetaAdapterFactory.getContainmentLink(
303+
-0x3154ae6ada15b0deL,
304+
-0x646defc46a3573f4L,
305+
0x10802efe25aL,
306+
0x47bf8397520e5942L,
307+
"smodelAttribute"
308+
)
298309
}
299310

300311
private object PROPS {

metamodel-export/src/main/kotlin/org/modelix/metamodel/export/MPSModelExporter.kt

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,21 +95,23 @@ class MPSModelExporter(private val outputFolder: File) {
9595
return data
9696
}
9797

98-
private fun exportNode(node: SNode): NodeData {
99-
val id: String = node.reference.toString()
100-
val concept: String = "mps:" + MetaIdHelper.getConcept(SNodeOperations.getConcept(node)).serialize()
101-
val role = node.containmentLink?.name ?: "rootNodes"
102-
val children: List<NodeData> = SNodeOperations.getChildren(node).map { exportNode(it) }
103-
val properties: MutableMap<String, String> = LinkedHashMap()
104-
val references: MutableMap<String, String> = LinkedHashMap()
105-
properties["#mpsNodeId#"] = node.nodeId.toString()
106-
for (property: SProperty in node.properties) {
107-
properties[property.name] = node.getProperty(property) ?: continue
108-
}
109-
for (reference: SReference in node.references) {
110-
references[reference.link.name] = reference.targetNodeReference.toString()
98+
companion object {
99+
fun exportNode(node: SNode): NodeData {
100+
val id: String = node.reference.toString()
101+
val concept: String = "mps:" + MetaIdHelper.getConcept(SNodeOperations.getConcept(node)).serialize()
102+
val role = node.containmentLink?.name ?: "rootNodes"
103+
val children: List<NodeData> = SNodeOperations.getChildren(node).map { exportNode(it) }
104+
val properties: MutableMap<String, String> = LinkedHashMap()
105+
val references: MutableMap<String, String> = LinkedHashMap()
106+
properties["#mpsNodeId#"] = node.nodeId.toString()
107+
for (property: SProperty in node.properties) {
108+
properties[property.name] = node.getProperty(property) ?: continue
109+
}
110+
for (reference: SReference in node.references) {
111+
references[reference.link.name] = reference.targetNodeReference.toString()
112+
}
113+
return NodeData(id, concept, role, children, properties, references)
111114
}
112-
return NodeData(id, concept, role, children, properties, references)
113115
}
114116

115117
private object CONCEPTS {

model-api/src/commonMain/kotlin/org/modelix/model/data/MetaModelData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ data class ConceptData(
4343
val references: List<ReferenceLinkData> = emptyList(),
4444
val extends: List<String> = emptyList(),
4545
override val deprecationMessage: String? = null,
46+
val smodelAttributes: List<NodeData> = emptyList(),
4647
val metaProperties: MutableMap<String, String> = mutableMapOf(),
4748
) : IDeprecatable {
4849
companion object {

0 commit comments

Comments
 (0)