From 9a02b5bac1afd42f41ba47c336f097fd066d7c61 Mon Sep 17 00:00:00 2001 From: Sanket Shevkar <43399522+sanketshevkar@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:55:13 +0530 Subject: [PATCH] fix(aliasing): added new resolvedName property to typeIdentifier object for import aliased declrations (#36) * fix(aliasing): added new resolvedName property to typeIdentifier object for import aliased declrations Signed-off-by: sanketshevkar * fix(aliasing): added new resolvedName property to typeIdentifier object for import aliased declrations Signed-off-by: sanketshevkar --------- Signed-off-by: sanketshevkar --- lib/metamodel.js | 5 +- lib/metamodel.json | 15 ++- lib/metamodelutil.js | 12 ++- test/cto/aliasedImport.json | 144 +++++++++++++++++++--------- test/cto/aliasedImportResolved.json | 81 +++++++++++++--- 5 files changed, 186 insertions(+), 71 deletions(-) diff --git a/lib/metamodel.js b/lib/metamodel.js index aa0731b..194c3bb 100644 --- a/lib/metamodel.js +++ b/lib/metamodel.js @@ -19,6 +19,5 @@ /** * The metamodel itself, as a CTO string */ -const metaModelCto = "/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@DotNetNamespace(\"AccordProject.Concerto.Metamodel\")\nnamespace concerto.metamodel@1.0.0\n\nconcept Position {\n o Integer line\n o Integer column\n o Integer offset\n}\n\nconcept Range {\n o Position start\n o Position end\n o String source optional\n}\n\nconcept TypeIdentifier {\n o String name\n o String namespace optional\n}\n\nabstract concept DecoratorLiteral {\n o Range location optional\n}\n\nconcept DecoratorString extends DecoratorLiteral {\n o String value\n}\n\nconcept DecoratorNumber extends DecoratorLiteral {\n o Double value\n}\n\nconcept DecoratorBoolean extends DecoratorLiteral {\n o Boolean value\n}\n\nconcept DecoratorTypeReference extends DecoratorLiteral {\n o TypeIdentifier type\n o Boolean isArray default=false\n}\n\nconcept Decorator {\n o String name\n o DecoratorLiteral[] arguments optional\n o Range location optional\n}\n\nconcept Identified {\n}\n\nconcept IdentifiedBy extends Identified {\n o String name\n}\n\nabstract concept Declaration {\n o String name regex=/^(\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4})(?:\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4}|\\p{Mn}|\\p{Mc}|\\p{Nd}|\\p{Pc}|\\u200C|\\u200D)*$/u\n o Decorator[] decorators optional\n o Range location optional\n}\n\nabstract concept MapKeyType {\n o Decorator[] decorators optional\n o Range location optional\n}\n\nabstract concept MapValueType {\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept MapDeclaration extends Declaration {\n o MapKeyType key\n o MapValueType value\n}\n\nconcept StringMapKeyType extends MapKeyType {}\nconcept DateTimeMapKeyType extends MapKeyType {}\n\nconcept ObjectMapKeyType extends MapKeyType {\n o TypeIdentifier type\n}\n\nconcept BooleanMapValueType extends MapValueType {}\nconcept DateTimeMapValueType extends MapValueType {}\nconcept StringMapValueType extends MapValueType {}\nconcept IntegerMapValueType extends MapValueType {}\nconcept LongMapValueType extends MapValueType {}\nconcept DoubleMapValueType extends MapValueType {}\n\nconcept ObjectMapValueType extends MapValueType {\n o TypeIdentifier type\n}\n\nconcept RelationshipMapValueType extends MapValueType {\n o TypeIdentifier type\n}\n\nconcept EnumDeclaration extends Declaration {\n o EnumProperty[] properties\n}\n\nconcept EnumProperty {\n o String name regex=/^(\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4})(?:\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4}|\\p{Mn}|\\p{Mc}|\\p{Nd}|\\p{Pc}|\\u200C|\\u200D)*$/u\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept ConceptDeclaration extends Declaration {\n o Boolean isAbstract default=false\n o Identified identified optional\n o TypeIdentifier superType optional\n o Property[] properties\n}\n\nconcept AssetDeclaration extends ConceptDeclaration {\n}\n\nconcept ParticipantDeclaration extends ConceptDeclaration {\n}\n\nconcept TransactionDeclaration extends ConceptDeclaration {\n}\n\nconcept EventDeclaration extends ConceptDeclaration {\n}\n\nabstract concept Property {\n o String name regex=/^(\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4})(?:\\p{Lu}|\\p{Ll}|\\p{Lt}|\\p{Lm}|\\p{Lo}|\\p{Nl}|\\$|_|\\\\u[0-9A-Fa-f]{4}|\\p{Mn}|\\p{Mc}|\\p{Nd}|\\p{Pc}|\\u200C|\\u200D)*$/u\n o Boolean isArray default=false\n o Boolean isOptional default=false\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept RelationshipProperty extends Property {\n o TypeIdentifier type\n}\n\nconcept ObjectProperty extends Property {\n o String defaultValue optional\n o TypeIdentifier type\n}\n\nconcept BooleanProperty extends Property {\n o Boolean defaultValue optional\n}\n\nconcept DateTimeProperty extends Property {\n}\n\nconcept StringProperty extends Property {\n o String defaultValue optional\n o StringRegexValidator validator optional\n o StringLengthValidator lengthValidator optional\n}\n\nconcept StringRegexValidator {\n o String pattern\n o String flags\n}\n\nconcept StringLengthValidator {\n o Integer minLength optional\n o Integer maxLength optional\n}\n\nconcept DoubleProperty extends Property {\n o Double defaultValue optional\n o DoubleDomainValidator validator optional\n}\n\nconcept DoubleDomainValidator {\n o Double lower optional\n o Double upper optional\n}\n\nconcept IntegerProperty extends Property {\n o Integer defaultValue optional\n o IntegerDomainValidator validator optional\n}\n\nconcept IntegerDomainValidator {\n o Integer lower optional\n o Integer upper optional\n}\n\nconcept LongProperty extends Property {\n o Long defaultValue optional\n o LongDomainValidator validator optional\n}\n\nconcept LongDomainValidator {\n o Long lower optional\n o Long upper optional\n}\n\nconcept AliasedType{\n o String name\n o String aliasedName\n}\nabstract concept Import {\n o String namespace\n o String uri optional\n}\n\nconcept ImportAll extends Import {\n}\n\nconcept ImportType extends Import {\n o String name\n}\n\nconcept ImportTypes extends Import {\n o String[] types\n o AliasedType[] aliasedTypes optional\n}\n\nconcept Model {\n o String namespace\n o String sourceUri optional\n o String concertoVersion optional\n o Import[] imports optional\n o Declaration[] declarations optional\n o Decorator[] decorators optional\n}\n\nconcept Models {\n o Model[] models\n}\n\nabstract concept ScalarDeclaration extends Declaration {\n}\n\nconcept BooleanScalar extends ScalarDeclaration {\n o Boolean defaultValue optional\n}\n\nconcept IntegerScalar extends ScalarDeclaration {\n o Integer defaultValue optional\n o IntegerDomainValidator validator optional\n}\n\nconcept LongScalar extends ScalarDeclaration {\n o Long defaultValue optional\n o LongDomainValidator validator optional\n}\n\nconcept DoubleScalar extends ScalarDeclaration {\n o Double defaultValue optional\n o DoubleDomainValidator validator optional\n}\n\nconcept StringScalar extends ScalarDeclaration {\n o String defaultValue optional\n o StringRegexValidator validator optional\n o StringLengthValidator lengthValidator optional\n}\n\nconcept DateTimeScalar extends ScalarDeclaration {\n o String defaultValue optional\n}\n"; - -module.exports = metaModelCto; +const metaModelCto = "/*\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@DotNetNamespace(\"AccordProject.Concerto.Metamodel\")\nnamespace concerto.metamodel@1.0.0\n\nconcept Position {\n o Integer line\n o Integer column\n o Integer offset\n}\n\nconcept Range {\n o Position start\n o Position end\n o String source optional\n}\n\nconcept TypeIdentifier {\n o String name\n o String resolvedName optional\n o String namespace optional\n}\n\nabstract concept DecoratorLiteral {\n o Range location optional\n}\n\nconcept DecoratorString extends DecoratorLiteral {\n o String value\n}\n\nconcept DecoratorNumber extends DecoratorLiteral {\n o Double value\n}\n\nconcept DecoratorBoolean extends DecoratorLiteral {\n o Boolean value\n}\n\nconcept DecoratorTypeReference extends DecoratorLiteral {\n o TypeIdentifier type\n o Boolean isArray default=false\n}\n\nconcept Decorator {\n o String name\n o DecoratorLiteral[] arguments optional\n o Range location optional\n}\n\nconcept Identified {\n}\n\nconcept IdentifiedBy extends Identified {\n o String name\n}\n\nabstract concept Declaration {\n o String name regex=/^(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4})(?:\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\u200C|\u200D)*$/u\n o Decorator[] decorators optional\n o Range location optional\n}\n\nabstract concept MapKeyType {\n o Decorator[] decorators optional\n o Range location optional\n}\n\nabstract concept MapValueType {\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept MapDeclaration extends Declaration {\n o MapKeyType key\n o MapValueType value\n}\n\nconcept StringMapKeyType extends MapKeyType {}\nconcept DateTimeMapKeyType extends MapKeyType {}\n\nconcept ObjectMapKeyType extends MapKeyType {\n o TypeIdentifier type\n}\n\nconcept BooleanMapValueType extends MapValueType {}\nconcept DateTimeMapValueType extends MapValueType {}\nconcept StringMapValueType extends MapValueType {}\nconcept IntegerMapValueType extends MapValueType {}\nconcept LongMapValueType extends MapValueType {}\nconcept DoubleMapValueType extends MapValueType {}\n\nconcept ObjectMapValueType extends MapValueType {\n o TypeIdentifier type\n}\n\nconcept RelationshipMapValueType extends MapValueType {\n o TypeIdentifier type\n}\n\nconcept EnumDeclaration extends Declaration {\n o EnumProperty[] properties\n}\n\nconcept EnumProperty {\n o String name regex=/^(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4})(?:\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\u200C|\u200D)*$/u\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept ConceptDeclaration extends Declaration {\n o Boolean isAbstract default=false\n o Identified identified optional\n o TypeIdentifier superType optional\n o Property[] properties\n}\n\nconcept AssetDeclaration extends ConceptDeclaration {\n}\n\nconcept ParticipantDeclaration extends ConceptDeclaration {\n}\n\nconcept TransactionDeclaration extends ConceptDeclaration {\n}\n\nconcept EventDeclaration extends ConceptDeclaration {\n}\n\nabstract concept Property {\n o String name regex=/^(\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4})(?:\p{Lu}|\p{Ll}|\p{Lt}|\p{Lm}|\p{Lo}|\p{Nl}|\$|_|\\u[0-9A-Fa-f]{4}|\p{Mn}|\p{Mc}|\p{Nd}|\p{Pc}|\u200C|\u200D)*$/u\n o Boolean isArray default=false\n o Boolean isOptional default=false\n o Decorator[] decorators optional\n o Range location optional\n}\n\nconcept RelationshipProperty extends Property {\n o TypeIdentifier type\n}\n\nconcept ObjectProperty extends Property {\n o String defaultValue optional\n o TypeIdentifier type\n}\n\nconcept BooleanProperty extends Property {\n o Boolean defaultValue optional\n}\n\nconcept DateTimeProperty extends Property {\n}\n\nconcept StringProperty extends Property {\n o String defaultValue optional\n o StringRegexValidator validator optional\n o StringLengthValidator lengthValidator optional\n}\n\nconcept StringRegexValidator {\n o String pattern\n o String flags\n}\n\nconcept StringLengthValidator {\n o Integer minLength optional\n o Integer maxLength optional\n}\n\nconcept DoubleProperty extends Property {\n o Double defaultValue optional\n o DoubleDomainValidator validator optional\n}\n\nconcept DoubleDomainValidator {\n o Double lower optional\n o Double upper optional\n}\n\nconcept IntegerProperty extends Property {\n o Integer defaultValue optional\n o IntegerDomainValidator validator optional\n}\n\nconcept IntegerDomainValidator {\n o Integer lower optional\n o Integer upper optional\n}\n\nconcept LongProperty extends Property {\n o Long defaultValue optional\n o LongDomainValidator validator optional\n}\n\nconcept LongDomainValidator {\n o Long lower optional\n o Long upper optional\n}\n\nconcept AliasedType{\n o String name\n o String aliasedName\n}\nabstract concept Import {\n o String namespace\n o String uri optional\n}\n\nconcept ImportAll extends Import {\n}\n\nconcept ImportType extends Import {\n o String name\n}\n\nconcept ImportTypes extends Import {\n o String[] types\n o AliasedType[] aliasedTypes optional\n}\n\nconcept Model {\n o String namespace\n o String sourceUri optional\n o String concertoVersion optional\n o Import[] imports optional\n o Declaration[] declarations optional\n o Decorator[] decorators optional\n}\n\nconcept Models {\n o Model[] models\n}\n\nabstract concept ScalarDeclaration extends Declaration {\n}\n\nconcept BooleanScalar extends ScalarDeclaration {\n o Boolean defaultValue optional\n}\n\nconcept IntegerScalar extends ScalarDeclaration {\n o Integer defaultValue optional\n o IntegerDomainValidator validator optional\n}\n\nconcept LongScalar extends ScalarDeclaration {\n o Long defaultValue optional\n o LongDomainValidator validator optional\n}\n\nconcept DoubleScalar extends ScalarDeclaration {\n o Double defaultValue optional\n o DoubleDomainValidator validator optional\n}\n\nconcept StringScalar extends ScalarDeclaration {\n o String defaultValue optional\n o StringRegexValidator validator optional\n o StringLengthValidator lengthValidator optional\n}\n\nconcept DateTimeScalar extends ScalarDeclaration {\n o String defaultValue optional\n}\n" +module.exports = metaModelCto; \ No newline at end of file diff --git a/lib/metamodel.json b/lib/metamodel.json index 379fb57..b91a726 100644 --- a/lib/metamodel.json +++ b/lib/metamodel.json @@ -84,6 +84,12 @@ "isArray": false, "isOptional": false }, + { + "$class": "concerto.metamodel@1.0.0.StringProperty", + "name": "resolvedName", + "isArray": false, + "isOptional": true + }, { "$class": "concerto.metamodel@1.0.0.StringProperty", "name": "namespace", @@ -998,10 +1004,10 @@ ] }, { - "$class":"concerto.metamodel@1.0.0.ConceptDeclaration", - "name":"AliasedType", - "isAbstract":false, - "properties":[ + "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", + "name": "AliasedType", + "isAbstract": false, + "properties": [ { "$class": "concerto.metamodel@1.0.0.StringProperty", "name": "name", @@ -1089,7 +1095,6 @@ "name": "Import" } }, - { "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", "name": "Model", diff --git a/lib/metamodelutil.js b/lib/metamodelutil.js index 7885867..f2455bd 100644 --- a/lib/metamodelutil.js +++ b/lib/metamodelutil.js @@ -63,7 +63,7 @@ function createNameTable(priorModels, metaModel) { 'Asset': {namespace: concertoNs, name: 'Asset'}, 'Participant': {namespace: concertoNs, name: 'Participant'}, 'Transaction': {namespace: concertoNs, name: 'Transaction'}, - 'Event': {namespace: concertoNs, name: 'Event'} + 'Event': {namespace: concertoNs, name: 'Event'}, }; // First list the imported names in order (overriding as we go along) @@ -89,7 +89,7 @@ function createNameTable(priorModels, metaModel) { if (!findDeclaration(modelFile, type)) { throw new Error(`Declaration ${type} in namespace ${namespace} not found`); } - table[localName] = {namespace, name: type}; + table[localName] = localName !== type ? {namespace, name: localName, resolvedName: type} : {namespace, name: type}; }); } else { (modelFile.declarations || []).forEach((decl) => { @@ -147,6 +147,9 @@ function resolveTypeNames(metaModel, table) { const name = metaModel.superType.name; metaModel.superType.namespace = resolveName(name, table); metaModel.superType.name = table[name].name; + if (table[name]?.resolvedName) { + metaModel.superType.resolvedName = table[name].resolvedName; + } } (metaModel.properties || []).forEach((property) => { resolveTypeNames(property, table); @@ -172,6 +175,9 @@ function resolveTypeNames(metaModel, table) { case `${MetaModelNamespace}.ObjectMapValueType`: { metaModel.type.namespace = resolveName(metaModel.type.name, table); metaModel.type.name = table[metaModel.type.name].name; + if (table[metaModel.type.name]?.resolvedName) { + metaModel.type.resolvedName = table[metaModel.type.name].resolvedName; + } } break; case `${MetaModelNamespace}.StringScalar`: @@ -273,4 +279,4 @@ module.exports = { resolveLocalNamesForAll, importFullyQualifiedNames, getExternalImports, -}; +}; \ No newline at end of file diff --git a/test/cto/aliasedImport.json b/test/cto/aliasedImport.json index 35f2217..e9da78b 100644 --- a/test/cto/aliasedImport.json +++ b/test/cto/aliasedImport.json @@ -4,56 +4,106 @@ { "$class": "concerto.metamodel@1.0.0.Model", "decorators": [], - "namespace": "org.saluja", + "namespace": "org.document@1.0.0", "imports": [], "declarations": [ - { - "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", - "name": "doc", - "isAbstract": false, - "properties": [ - { - "$class": "concerto.metamodel@1.0.0.StringProperty", - "name": "name", - "isArray": false, - "isOptional": false - } - ] - } + { + "$class": "concerto.metamodel@1.0.0.StringScalar", + "name": "DocumentName" + }, + { + "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", + "name": "Contract", + "isAbstract": false, + "properties": [ + { + "$class": "concerto.metamodel@1.0.0.IntegerProperty", + "name": "contractId", + "isArray": false, + "isOptional": false + }, + { + "$class": "concerto.metamodel@1.0.0.DateTimeProperty", + "name": "dateSigned", + "isArray": false, + "isOptional": false + } + ] + } ] - }, - { - "$class": "concerto.metamodel@1.0.0.Model", - "decorators": [], - "namespace": "org.test", - "imports": [ - { - "$class": "concerto.metamodel@1.0.0.ImportTypes", - "namespace": "org.saluja", - "types": [ - "doc" - ], - "aliasedTypes": [ - { - "$class": "concerto.metamodel@1.0.0.AliasedType", - "name": "doc", - "aliasedName": "d" - } - ] - } + }, + { + "$class": "concerto.metamodel@1.0.0.Model", + "decorators": [], + "namespace": "org.test@1.0.0", + "imports": [ + { + "$class": "concerto.metamodel@1.0.0.ImportTypes", + "namespace": "org.document@1.0.0", + "types": [ + "Contract", + "DocumentName" ], - "declarations": [ - { - "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", - "name": "file", - "isAbstract": false, - "properties": [], - "superType": { - "$class": "concerto.metamodel@1.0.0.TypeIdentifier", - "name": "d" - } - } + "aliasedTypes": [ + { + "$class": "concerto.metamodel@1.0.0.AliasedType", + "name": "Contract", + "aliasedName": "NDAContract" + }, + { + "$class": "concerto.metamodel@1.0.0.AliasedType", + "name": "DocumentName", + "aliasedName": "NDAName" + } + ] + } + ], + "declarations": [ + { + "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", + "name": "File", + "isAbstract": false, + "properties": [ + { + "$class": "concerto.metamodel@1.0.0.ObjectProperty", + "name": "name", + "type": { + "$class": "concerto.metamodel@1.0.0.TypeIdentifier", + "name": "NDAName" + }, + "isArray": false, + "isOptional": false + } + ], + "superType": { + "$class": "concerto.metamodel@1.0.0.TypeIdentifier", + "name": "NDAContract" + } + }, + { + "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", + "name": "FileAsset", + "isAbstract": false, + "properties": [ + { + "$class": "concerto.metamodel@1.0.0.StringProperty", + "name": "fileId", + "isArray": false, + "isOptional": false + }, + { + "$class": "concerto.metamodel@1.0.0.ObjectProperty", + "name": "file", + "type": { + "$class": "concerto.metamodel@1.0.0.TypeIdentifier", + "name": "File" + }, + "isArray": false, + "isOptional": false + } ] - } + } + ] + } ] -} \ No newline at end of file + } \ No newline at end of file diff --git a/test/cto/aliasedImportResolved.json b/test/cto/aliasedImportResolved.json index 4feb000..3a0e0db 100644 --- a/test/cto/aliasedImportResolved.json +++ b/test/cto/aliasedImportResolved.json @@ -4,17 +4,28 @@ { "$class": "concerto.metamodel@1.0.0.Model", "decorators": [], - "namespace": "org.saluja", + "namespace": "org.document@1.0.0", "imports": [], "declarations": [ + { + "$class": "concerto.metamodel@1.0.0.StringScalar", + "name": "DocumentName", + "namespace": "org.document@1.0.0" + }, { "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", - "name": "doc", + "name": "Contract", "isAbstract": false, "properties": [ { - "$class": "concerto.metamodel@1.0.0.StringProperty", - "name": "name", + "$class": "concerto.metamodel@1.0.0.IntegerProperty", + "name": "contractId", + "isArray": false, + "isOptional": false + }, + { + "$class": "concerto.metamodel@1.0.0.DateTimeProperty", + "name": "dateSigned", "isArray": false, "isOptional": false } @@ -25,19 +36,25 @@ { "$class": "concerto.metamodel@1.0.0.Model", "decorators": [], - "namespace": "org.test", + "namespace": "org.test@1.0.0", "imports": [ { "$class": "concerto.metamodel@1.0.0.ImportTypes", - "namespace": "org.saluja", + "namespace": "org.document@1.0.0", "types": [ - "doc" + "Contract", + "DocumentName" ], "aliasedTypes": [ { "$class": "concerto.metamodel@1.0.0.AliasedType", - "name": "doc", - "aliasedName": "d" + "name": "Contract", + "aliasedName": "NDAContract" + }, + { + "$class": "concerto.metamodel@1.0.0.AliasedType", + "name": "DocumentName", + "aliasedName": "NDAName" } ] } @@ -45,14 +62,52 @@ "declarations": [ { "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", - "name": "file", + "name": "File", "isAbstract": false, - "properties": [], + "properties": [ + { + "$class": "concerto.metamodel@1.0.0.ObjectProperty", + "name": "name", + "type": { + "$class": "concerto.metamodel@1.0.0.TypeIdentifier", + "name": "NDAName", + "namespace": "org.document@1.0.0", + "resolvedName": "DocumentName" + }, + "isArray": false, + "isOptional": false + } + ], "superType": { "$class": "concerto.metamodel@1.0.0.TypeIdentifier", - "name": "doc", - "namespace": "org.saluja" + "name": "NDAContract", + "namespace": "org.document@1.0.0", + "resolvedName": "Contract" } + }, + { + "$class": "concerto.metamodel@1.0.0.ConceptDeclaration", + "name": "FileAsset", + "isAbstract": false, + "properties": [ + { + "$class": "concerto.metamodel@1.0.0.StringProperty", + "name": "fileId", + "isArray": false, + "isOptional": false + }, + { + "$class": "concerto.metamodel@1.0.0.ObjectProperty", + "name": "file", + "type": { + "$class": "concerto.metamodel@1.0.0.TypeIdentifier", + "name": "File", + "namespace": "org.test@1.0.0" + }, + "isArray": false, + "isOptional": false + } + ] } ] }