|
16 | 16 |
|
17 | 17 | package org.modelix.model.sync.bulk
|
18 | 18 |
|
| 19 | +import mu.KLogger |
| 20 | +import org.modelix.model.api.BuiltinLanguages |
| 21 | +import org.modelix.model.api.SimpleConcept |
19 | 22 | import org.modelix.model.data.ModelData
|
20 | 23 | import org.modelix.model.data.NodeData
|
21 | 24 |
|
22 | 25 | fun mergeModelData(vararg models: ModelData): ModelData {
|
23 | 26 | return ModelData(root = NodeData(children = models.map { it.root }))
|
24 | 27 | }
|
| 28 | + |
| 29 | +internal fun logImportSize(nodeData: NodeData, logger: KLogger) { |
| 30 | + logger.debug { "Number of modules: ${countMpsModules(nodeData)}" } |
| 31 | + logger.debug { "Number of models: ${countMpsModels(nodeData)}" } |
| 32 | + logger.debug { "Number of concepts: ${countConcepts(nodeData)}" } |
| 33 | + logger.debug { "Number of properties: ${countProperties(nodeData)}" } |
| 34 | + logger.debug { "Number of references: ${countReferences(nodeData)}" } |
| 35 | +} |
| 36 | + |
| 37 | +private fun countProperties(data: NodeData): Int = |
| 38 | + data.properties.size + data.children.sumOf { countProperties(it) } |
| 39 | + |
| 40 | +private fun countReferences(data: NodeData): Int = |
| 41 | + data.references.size + data.children.sumOf { countReferences(it) } |
| 42 | + |
| 43 | +private fun countConcepts(data: NodeData): Int { |
| 44 | + val set = mutableSetOf<String>() |
| 45 | + countConceptsRec(data, set) |
| 46 | + return set.size |
| 47 | +} |
| 48 | + |
| 49 | +private fun countConceptsRec(data: NodeData, set: MutableSet<String>) { |
| 50 | + data.concept?.let { set.add(it) } |
| 51 | + data.children.forEach { countConceptsRec(it, set) } |
| 52 | +} |
| 53 | + |
| 54 | +private fun countMpsModels(data: NodeData) = |
| 55 | + countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Model) |
| 56 | + |
| 57 | +private fun countMpsModules(data: NodeData) = |
| 58 | + countSpecificConcept(data, BuiltinLanguages.MPSRepositoryConcepts.Module) |
| 59 | + |
| 60 | +private fun countSpecificConcept(data: NodeData, concept: SimpleConcept): Int { |
| 61 | + var count = if (data.concept == concept.getUID()) 1 else 0 |
| 62 | + count += data.children.sumOf { countSpecificConcept(it, concept) } |
| 63 | + return count |
| 64 | +} |
0 commit comments