getReactionsSegmentNames(EPackage fromMetamodel, EPackage toMetamodel) {
commonalityFiles.filter [ file |
- val commonalityPackage = file.concept.vitruvDomain.metamodelRootPackage
+ val commonalityPackage = file.concept.metamodelRootPackage
return fromMetamodel == commonalityPackage || toMetamodel == commonalityPackage
].flatMap [ file |
file.commonality.participations.map [
- val participationPackage = domain.vitruvDomain.metamodelRootPackage
+ val participationPackage = domain.metamodelRootPackage
return switch (participationPackage) {
case fromMetamodel:
getReactionsSegmentFromParticipationToCommonalityName(file.commonality, it)
@@ -155,8 +155,8 @@ class ChangePropagationSpecificationGenerator implements SubGenerator {
private def Concept getConcept(EPackage fromMetamodel, EPackage toMetamodel) {
for (file : commonalityFiles) {
- if (fromMetamodel == file.concept.vitruvDomain.metamodelRootPackage ||
- toMetamodel == file.concept.vitruvDomain.metamodelRootPackage) {
+ if (fromMetamodel == file.concept.metamodelRootPackage ||
+ toMetamodel == file.concept.metamodelRootPackage) {
return file.concept
}
}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomain.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomain.xtend
deleted file mode 100644
index 0d6b5d4220..0000000000
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomain.xtend
+++ /dev/null
@@ -1,48 +0,0 @@
-package tools.vitruv.dsls.commonalities.generator.domain
-
-import org.eclipse.emf.ecore.EPackage
-import tools.vitruv.extensions.dslruntime.commonalities.IntermediateVitruvDomain
-import tools.vitruv.framework.domains.VitruvDomain
-import tools.vitruv.framework.domains.VitruvDomainProvider
-
-import static extension tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainConstants.*
-import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
-import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
-import org.eclipse.xtend.lib.annotations.Accessors
-
-/**
- * Dummy {@link VitruvDomain} which represents the concept domain during the
- * generation process (mainly during the generation of reactions).
- *
- * This is required because the generated concept domain cannot be used
- * until after the compilation of the generated code.
- */
-class ConceptDomain extends IntermediateVitruvDomain {
- @Accessors
- val Provider provider
-
- new(String conceptName, EPackage conceptPackage) {
- super(conceptName.conceptDomainName, conceptPackage,
- conceptName.intermediateModelFileExtension)
- provider = new Provider(this, conceptName.conceptDomainProviderClassName.qualifiedName)
- }
-
- @VitruvDomainProviderRegistry.IgnoreInStandalone
- private static class Provider implements VitruvDomainProvider {
- val ConceptDomain domain
- val String canonicalName
-
- private new(ConceptDomain domain, String canonicalName) {
- this.domain = domain
- this.canonicalName = canonicalName
- }
-
- override getDomain() {
- domain
- }
-
- override getCanonicalNameForReference() {
- canonicalName
- }
- }
-}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainConstants.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainConstants.xtend
deleted file mode 100644
index 29a24d3a3f..0000000000
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainConstants.xtend
+++ /dev/null
@@ -1,51 +0,0 @@
-package tools.vitruv.dsls.commonalities.generator.domain
-
-import edu.kit.ipd.sdq.activextendannotations.Utility
-import org.eclipse.emf.common.util.URI
-import tools.vitruv.dsls.common.GenericClassNameGenerator
-import tools.vitruv.dsls.commonalities.language.Concept
-
-import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
-
-@Utility
-class ConceptDomainConstants {
-
- static val DOMAIN_TYPES_BASE_URI = URI.createURI('synthetic:/commonalities/domainTypes')
-
- @Pure
- static def getConceptDomainName(Concept concept) {
- concept.name.conceptDomainName
- }
-
- @Pure
- static def getConceptDomainName(String conceptName) {
- conceptName
- }
-
- @Pure
- static def getConceptDomainClassName(Concept concept) {
- concept.name.conceptDomainClassName
- }
-
- @Pure
- static def getConceptDomainClassName(String conceptName) {
- new GenericClassNameGenerator(conceptName.intermediateMetamodelPackageName,
- conceptName.conceptDomainName.toFirstUpper + 'Domain')
- }
-
- @Pure
- static def getConceptDomainProviderClassName(Concept concept) {
- concept.name.conceptDomainProviderClassName
- }
-
- @Pure
- static def getConceptDomainProviderClassName(String conceptName) {
- new GenericClassNameGenerator(conceptName.intermediateMetamodelPackageName,
- conceptName.conceptDomainName.toFirstUpper + 'DomainProvider')
- }
-
- @Pure
- static def getDomainTypeUri(String qualifiedClassName) {
- DOMAIN_TYPES_BASE_URI.appendSegment(qualifiedClassName + '.java')
- }
-}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainGenerator.xtend
deleted file mode 100644
index a50593f6c8..0000000000
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/domain/ConceptDomainGenerator.xtend
+++ /dev/null
@@ -1,119 +0,0 @@
-package tools.vitruv.dsls.commonalities.generator.domain
-
-import com.google.inject.Inject
-import com.google.inject.Provider
-import java.util.Arrays
-import org.apache.log4j.Logger
-import org.eclipse.xtend2.lib.StringConcatenationClient
-import org.eclipse.xtext.common.types.JvmDeclaredType
-import org.eclipse.xtext.common.types.JvmGenericType
-import org.eclipse.xtext.common.types.JvmMember
-import org.eclipse.xtext.common.types.JvmVisibility
-import org.eclipse.xtext.common.types.TypesFactory
-import org.eclipse.xtext.resource.XtextResource
-import org.eclipse.xtext.xbase.compiler.CompilationTemplateAdapter
-import org.eclipse.xtext.xbase.compiler.JvmModelGenerator
-import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder
-import tools.vitruv.dsls.commonalities.generator.SubGenerator
-import tools.vitruv.extensions.dslruntime.commonalities.IntermediateVitruvDomain
-import tools.vitruv.framework.domains.VitruvDomainProvider
-
-import static extension tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainConstants.*
-import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
-import tools.vitruv.dsls.commonalities.generator.util.guice.GenerationScoped
-import tools.vitruv.dsls.commonalities.generator.GenerationContext
-
-@GenerationScoped
-class ConceptDomainGenerator implements SubGenerator {
- static val Logger log = Logger.getLogger(ConceptDomainGenerator)
-
- @Inject extension GenerationContext
- @Inject JvmModelGenerator delegate
- @Inject JvmTypeReferenceBuilder.Factory typeReferenceFactory
- @Inject Provider resourceProvider
-
- override beforeGenerate() {
- if (!isNewResourceSet) return;
- resourceSet.resources += generatedConcepts.flatMap [
- #[
- newResource(conceptDomainClassName.qualifiedName),
- newResource(conceptDomainProviderClassName.qualifiedName)
- ]
- ]
- }
-
- override generate() {
- if (!isNewResourceSet) return;
- val typeReferenceBuilder = typeReferenceFactory.create(resourceSet)
- generatedConcepts.flatMap [ concept |
- log.debug('''Generating domain and domain provider for concept '«concept»'.''')
- val domainType = concept.createDomain(typeReferenceBuilder)
- val domainProviderType = concept.createDomainProvider(typeReferenceBuilder, domainType)
- return #[domainType, domainProviderType]
- ].forEach[generateType()]
- }
-
- private def createDomain(String conceptName, extension JvmTypeReferenceBuilder typeReferenceBuilder) {
- TypesFactory.eINSTANCE.createJvmGenericType => [
- simpleName = conceptName.conceptDomainClassName.simpleName
- packageName = conceptName.conceptDomainClassName.packageName
- superTypes += IntermediateVitruvDomain.typeRef
- visibility = JvmVisibility.PUBLIC
- members += Arrays.asList(
- TypesFactory.eINSTANCE.createJvmConstructor => [
- visibility = JvmVisibility.PUBLIC
- body = '''
- super("«conceptName.conceptDomainName»",
- «'''«conceptName.intermediateMetamodelPackageClassName.simpleName»'''».eINSTANCE,
- "«conceptName.intermediateModelFileExtension»");'''
- ]
- )
- ]
- }
-
- private def createDomainProvider(String conceptName, extension JvmTypeReferenceBuilder typeReferenceBuilder,
- JvmGenericType domainType) {
- TypesFactory.eINSTANCE.createJvmGenericType => [
- simpleName = conceptName.conceptDomainProviderClassName.simpleName
- packageName = conceptName.conceptDomainProviderClassName.packageName
- superTypes += VitruvDomainProvider.typeRef(domainType.typeRef)
- visibility = JvmVisibility.PUBLIC
- members += Arrays.asList(
- TypesFactory.eINSTANCE.createJvmField => [
- visibility = JvmVisibility.PRIVATE
- static = true
- type = domainType.typeRef
- simpleName = 'instance'
- ],
- TypesFactory.eINSTANCE.createJvmOperation => [
- visibility = JvmVisibility.PUBLIC
- synchronized = true
- simpleName = 'getDomain'
- returnType = domainType.typeRef
- body = '''
- if (instance == null) {
- instance = new «domainType.typeRef»();
- }
- return instance;
- '''
- ]
- )
- ]
- }
-
- private def generateType(JvmDeclaredType type) {
- val typeResource = resourceSet.getResource(type.qualifiedName.domainTypeUri, false)
- typeResource.contents += type
- delegate.doGenerate(typeResource, fsa)
- }
-
- private static def setBody(JvmMember member, StringConcatenationClient body) {
- member.eAdapters += new CompilationTemplateAdapter() => [compilationTemplate = body]
- }
-
- private def newResource(String qualifiedClassName) {
- resourceProvider.get() => [
- URI = qualifiedClassName.domainTypeUri
- ]
- }
-}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/ReactionsGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/ReactionsGenerator.xtend
index 3a09148342..c3797c6f11 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/ReactionsGenerator.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/ReactionsGenerator.xtend
@@ -15,7 +15,6 @@ import tools.vitruv.dsls.commonalities.language.Participation
import tools.vitruv.dsls.reactions.api.generator.IReactionsGenerator
import tools.vitruv.dsls.reactions.builder.FluentReactionsFileBuilder
import tools.vitruv.dsls.reactions.builder.FluentReactionsSegmentBuilder
-import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.*
import tools.vitruv.dsls.commonalities.generator.GenerationContext
@@ -94,37 +93,22 @@ class ReactionsGenerator implements SubGenerator {
val reactionsGenerator = reactionsGeneratorProvider.get() => [
useResourceSet(resourceSet)
]
-
- // Temporarily register dummy domains for our generated concept domains:
- // These are used during the reactions code generation.
- logger.trace('''Temporarily registering concept domains: «generatedConcepts»''')
- for (String conceptName : generatedConcepts) {
- VitruvDomainProviderRegistry.registerDomainProvider(conceptName, conceptName.vitruvDomain.provider)
- }
-
- try {
- // Generate the Java code for the given reactions:
- reactionsGenerator.addReactionsFile(reactionsFile)
- reactionsGenerator.generate(fsa)
-
- // Optionally: Also persist the reactions in the Reactions language itself.
- if (settings.createReactionFiles) {
- reactionsGenerator.writeReactions(fsa)
- }
- } finally {
- // Unregister our temporarily registered concept domains again:
- logger.trace('''Unregistering concept domains again: «generatedConcepts»''')
- for (String conceptName : generatedConcepts) {
- VitruvDomainProviderRegistry.unregisterDomainProvider(conceptName)
- }
+
+ // Generate the Java code for the given reactions:
+ reactionsGenerator.addReactionsFile(reactionsFile)
+ reactionsGenerator.generate(fsa)
+
+ // Optionally: Also persist the reactions in the Reactions language itself.
+ if (settings.createReactionFiles) {
+ reactionsGenerator.writeReactions(fsa)
}
}
private def generateCommonalityFromParticipationSegment(Participation participation) {
val segment = create.reactionsSegment(
getReactionsSegmentFromParticipationToCommonalityName(commonality, participation)) //
- .inReactionToChangesIn(participation.domain.vitruvDomain) //
- .executeActionsIn(commonalityFile.concept.vitruvDomain)
+ .inReactionToChangesIn(participation.domain.metamodelRootPackage) //
+ .executeActionsIn(commonalityFile.concept.metamodelRootPackage)
participation.generateParticipationChangeReactions(segment)
return segment
}
@@ -132,8 +116,8 @@ class ReactionsGenerator implements SubGenerator {
private def generateCommonalityToParticipationSegment(Participation participation) {
val segment = create.reactionsSegment(
getReactionsSegmentFromCommonalityToParticipationName(commonality, participation)) //
- .inReactionToChangesIn(commonalityFile.concept.vitruvDomain) //
- .executeActionsIn(participation.domain.vitruvDomain)
+ .inReactionToChangesIn(commonalityFile.concept.metamodelRootPackage) //
+ .executeActionsIn(participation.domain.metamodelRootPackage)
participation.generateCommonalityChangeReactions(segment)
return segment
}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/resource/ResourceBridgeHelper.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/resource/ResourceBridgeHelper.xtend
index 0d50a601eb..3a8f840d3d 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/resource/ResourceBridgeHelper.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/reactions/resource/ResourceBridgeHelper.xtend
@@ -30,7 +30,7 @@ class ResourceBridgeHelper extends ReactionsGenerationHelper {
assignable = resourceBridge.copy
feature = typeProvider.findMethod(IntermediateResourceBridge, 'setFileExtension')
value = XbaseFactory.eINSTANCE.createXStringLiteral => [
- value = resourceClass.superMetaclass.domain.vitruvDomain.fileExtensions.head
+ value = resourceClass.superMetaclass.domain.name
]
]
// We initially disable the automatic persistence for new resource bridges and enable it again at the end
@@ -74,7 +74,7 @@ class ResourceBridgeHelper extends ReactionsGenerationHelper {
assignable = resourceBridge.copy
feature = typeProvider.findMethod(IntermediateResourceBridge, 'setIntermediateNS')
value = XbaseFactory.eINSTANCE.createXStringLiteral => [
- value = commonality.concept.vitruvDomain.nsUris.head
+ value = commonality.concept.metamodelRootPackage.nsURI
]
]
)
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/ClassifierProvider.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/ClassifierProvider.xtend
index 569e0b2b9b..6a07ef250f 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/ClassifierProvider.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/ClassifierProvider.xtend
@@ -58,13 +58,13 @@ class ClassifierProvider {
def Classifier findClassifier(Domain containingDomain, String qualifiedInstanceClassName) {
if (qualifiedInstanceClassName.nullOrEmpty) return null
val eClassifier = containingDomain.findEClassifier(qualifiedInstanceClassName)
- return eClassifier.toClassifier(containingDomain)
+ return eClassifier?.toClassifier(containingDomain)
}
// Searches the Ecore package and the domain specific packages for a matching EClassifier:
private static def EClassifier findEClassifier(Domain containingDomain, String qualifiedInstanceClassName) {
if (qualifiedInstanceClassName.nullOrEmpty) return null
- var domainPackages = if (containingDomain instanceof VitruvDomainAdapter) {
+ var domainPackages = if (containingDomain instanceof MetamodelAdapter) {
containingDomain.allPackages
} else {
emptyList
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/LanguageElementsAdapterFactory.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/LanguageElementsAdapterFactory.xtend
index df87023198..4ae431c28b 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/LanguageElementsAdapterFactory.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/LanguageElementsAdapterFactory.xtend
@@ -12,8 +12,8 @@ class LanguageElementsAdapterFactory extends LanguageElementsFactoryImpl {
new LeastSpecificTypeI
}
- override createVitruviusDomain() {
- new VitruvDomainAdapter
+ override createMetamodel() {
+ new MetamodelAdapter
}
override createEFeatureAttribute() {
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruvDomainAdapter.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/MetamodelAdapter.xtend
similarity index 67%
rename from bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruvDomainAdapter.xtend
rename to bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/MetamodelAdapter.xtend
index f47fb7f94c..138441129a 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruvDomainAdapter.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/MetamodelAdapter.xtend
@@ -3,18 +3,17 @@ package tools.vitruv.dsls.commonalities.language.elements
import java.util.Set
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EPackage
-import tools.vitruv.dsls.commonalities.language.elements.impl.VitruviusDomainImpl
-import tools.vitruv.framework.domains.VitruvDomain
import static com.google.common.base.Preconditions.*
import java.util.List
+import tools.vitruv.dsls.commonalities.language.elements.impl.MetamodelImpl
-class VitruvDomainAdapter extends VitruviusDomainImpl implements Wrapper {
- VitruvDomain wrappedVitruvDomain
+class MetamodelAdapter extends MetamodelImpl implements Wrapper {
+ EPackage wrappedEPackage
var extension ClassifierProvider classifierProvider
- override forVitruvDomain(VitruvDomain vitruvDomain) {
- this.wrappedVitruvDomain = checkNotNull(vitruvDomain)
+ override forEPackage(EPackage ePackage) {
+ this.wrappedEPackage = checkNotNull(ePackage)
return this
}
@@ -24,7 +23,7 @@ class VitruvDomainAdapter extends VitruviusDomainImpl implements Wrapper getRootPackages() {
- return (List.of(wrappedVitruvDomain.metamodelRootPackage) + wrappedVitruvDomain.furtherRootPackages).toSet
+ return Set.of(wrappedEPackage)
}
def Set getAllPackages() {
@@ -71,27 +70,26 @@ class VitruvDomainAdapter extends VitruviusDomainImpl implements Wrapper allMetamodelsByName = new HashMap()
+
+ package new() {
+ }
+
+ def registerReferencedMetamodel(String name, EPackage ePackage) {
+ if (!allMetamodelsByName.containsKey(name)) {
+ val metamodel = LanguageElementsFactory.eINSTANCE.createMetamodel.withClassifierProvider(
+ ClassifierProvider.INSTANCE).forEPackage(ePackage)
+ allMetamodelsByName.put(name, metamodel)
+ container.contents += metamodel
+ }
+ }
+
+ private def createContainerResource() {
+ val resourceSet = new ResourceSetImpl
+ return resourceSet.createResource(CONTAINER_RESOURCE_URI)
+ }
+
+ def getMetamodelByName(String name) {
+ allMetamodelsByName.get(name)
+ }
+
+ def getAllMetamodels() {
+ allMetamodelsByName.values
+ }
+}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruviusDomainProvider.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruviusDomainProvider.xtend
deleted file mode 100644
index f43bc18fcd..0000000000
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/language/elements/VitruviusDomainProvider.xtend
+++ /dev/null
@@ -1,50 +0,0 @@
-package tools.vitruv.dsls.commonalities.language.elements
-
-import com.google.inject.Singleton
-import edu.kit.ipd.sdq.activextendannotations.Lazy
-import java.util.Map
-import org.eclipse.emf.common.util.URI
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl
-import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
-
-@Singleton
-class VitruviusDomainProvider {
-
- /*
- * In order to be referenced from a Xtext language, EObjects must be
- * contained in a resource. So we create a fake resource to put our domain
- * adapters in. This resource is never serialized and has no other purpose.
- */
- val static CONTAINER_RESOURCE_URI = URI.createURI('synthetic:/commonalities/vitruvDomainAdapters')
- val container = createContainerResource
-
- // there is currently no way to change the domains while developing, so
- // it’s okay to cache them.
- @Lazy(PRIVATE) Map allVitruviusDomainsByName = loadDomains()
-
- package new() {
- }
-
- private def loadDomains() {
- return newHashMap(
- VitruvDomainProviderRegistry.allDomainProviders.map[domain].map [ domain |
- val vitruvDomain = LanguageElementsFactory.eINSTANCE.createVitruviusDomain
- .withClassifierProvider(ClassifierProvider.INSTANCE).forVitruvDomain(domain)
- container.contents += vitruvDomain
- return domain.name -> vitruvDomain
- ])
- }
-
- private def createContainerResource() {
- val resourceSet = new ResourceSetImpl
- return resourceSet.createResource(CONTAINER_RESOURCE_URI)
- }
-
- def getDomainByName(String name) {
- allVitruviusDomainsByName.get(name)
- }
-
- def getAllDomains() {
- allVitruviusDomainsByName.values
- }
-}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameConverter.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameConverter.xtend
index a5e14f4832..b66bdb8630 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameConverter.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameConverter.xtend
@@ -25,20 +25,22 @@ class CommonalitiesLanguageQualifiedNameConverter extends IQualifiedNameConverte
* 'a.b.c.d' -> #['a', 'b', 'c', 'd'] (java-like)
*/
override toQualifiedName(String qualifiedNameAsText) {
- val domainSeparatorIndex = qualifiedNameAsText.indexOf(DOMAIN_METACLASS_SEPARATOR)
+ if (qualifiedNameAsText.startsWith("http://"))
+ return QualifiedName.create(qualifiedNameAsText)
+ val domainSeparatorIndex = qualifiedNameAsText.indexOf(METAMODEL_METACLASS_SEPARATOR)
if (domainSeparatorIndex === NOT_FOUND) {
return super.toQualifiedName(qualifiedNameAsText)
}
val domainName = qualifiedNameAsText.substring(0, domainSeparatorIndex)
val classAndAttributePart = qualifiedNameAsText.substring(domainSeparatorIndex + 1)
- return QualifiedName.create(domainName, DOMAIN_METACLASS_SEPARATOR_SEGMENT)
+ return QualifiedName.create(domainName, METAMODEL_METACLASS_SEPARATOR_SEGMENT)
.append(super.toQualifiedName(classAndAttributePart))
}
override toString(QualifiedName name) {
- val domainName = name.domainName
+ val domainName = name.metamodelName
if (domainName !== null) {
- return domainName + DOMAIN_METACLASS_SEPARATOR + super.toString(name.skipFirst(2))
+ return domainName + METAMODEL_METACLASS_SEPARATOR + super.toString(name.skipFirst(2))
} else {
return super.toString(name)
}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameProvider.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameProvider.xtend
index 7f20a82659..80c649402d 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameProvider.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/CommonalitiesLanguageQualifiedNameProvider.xtend
@@ -57,7 +57,7 @@ class CommonalitiesLanguageQualifiedNameProvider extends XbaseQualifiedNameProvi
if (packageLikeName === null) return null
val result = new ArrayList(4)
result.add(packageLikeName)
- result.add(DOMAIN_METACLASS_SEPARATOR_SEGMENT)
+ result.add(METAMODEL_METACLASS_SEPARATOR_SEGMENT)
return result
}
}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/QualifiedNameHelper.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/QualifiedNameHelper.xtend
index 8d3d513c72..2c9871065d 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/QualifiedNameHelper.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/names/QualifiedNameHelper.xtend
@@ -5,27 +5,27 @@ import org.eclipse.xtext.naming.QualifiedName
@Utility
class QualifiedNameHelper {
- public static val DOMAIN_METACLASS_SEPARATOR = ":"
+ public static val METAMODEL_METACLASS_SEPARATOR = ":"
public static val METACLASS_ATTRIBUTE_SEPARATOR = "."
- public static val DOMAIN_METACLASS_SEPARATOR_SEGMENT = ":"
+ public static val METAMODEL_METACLASS_SEPARATOR_SEGMENT = ":"
static def getQualifiedDomainName(String domainName) {
- return QualifiedName.create(domainName, DOMAIN_METACLASS_SEPARATOR_SEGMENT)
+ return QualifiedName.create(domainName, METAMODEL_METACLASS_SEPARATOR_SEGMENT)
}
- static def hasDomainName(QualifiedName name) {
- return (name.segmentCount > 1 && name.getSegment(1) == DOMAIN_METACLASS_SEPARATOR_SEGMENT)
+ static def hasMetamodelName(QualifiedName name) {
+ return (name.segmentCount > 1 && name.getSegment(1) == METAMODEL_METACLASS_SEPARATOR_SEGMENT)
}
- static def getDomainName(QualifiedName name) {
- return (name.hasDomainName) ? name.getSegment(0) : null
+ static def getMetamodelName(QualifiedName name) {
+ return (name.hasMetamodelName) ? name.getSegment(0) : null
}
static def getClassName(QualifiedName name) {
- return (name.segmentCount > 2 && name.hasDomainName) ? name.getSegment(2) : null
+ return (name.segmentCount > 2 && name.hasMetamodelName) ? name.getSegment(2) : null
}
static def getMemberName(QualifiedName name) {
- return (name.segmentCount > 3 && name.hasDomainName) ? name.getSegment(3) : null
+ return (name.segmentCount > 3 && name.hasMetamodelName) ? name.getSegment(3) : null
}
}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/CommonalitiesLanguageGlobalScopeProvider.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/CommonalitiesLanguageGlobalScopeProvider.xtend
index 007301eb81..1d6e9bfeed 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/CommonalitiesLanguageGlobalScopeProvider.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/CommonalitiesLanguageGlobalScopeProvider.xtend
@@ -17,16 +17,20 @@ import tools.vitruv.dsls.commonalities.names.IEObjectDescriptionProvider
import static tools.vitruv.dsls.commonalities.language.LanguagePackage.Literals.*
import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.*
+import static tools.vitruv.dsls.common.elements.ElementsPackage.Literals.METAMODEL_IMPORT__PACKAGE
+import tools.vitruv.dsls.common.elements.EPackageRegistryScope
+import tools.vitruv.dsls.commonalities.language.elements.MetamodelProvider
class CommonalitiesLanguageGlobalScopeProvider extends TypesAwareDefaultGlobalScopeProvider {
- @Inject Provider allMetaclassesScope
@Inject extension IEObjectDescriptionProvider descriptionProvider
-
+ @Inject Provider packagesScope
+ @Inject MetamodelProvider metamodelProvider
+
override getScope(Resource resource, EReference reference, Predicate filter) {
new ComposedScope(
// Delegating to the default global scope provider first ensures that we get actual Concept and
// Commonality instances for commonality participation domains and participation classes, rather than
- // EClassAdapters as they would get created by the VitruvDomainMetaclassesScope.
+ // EClassAdapters as they would get created by the MetamodelMetaclassesScope.
super.getScope(resource, reference, filter),
new FilteringScope(_getScope(resource, reference), filter ?: Predicates.alwaysTrue)
)
@@ -34,8 +38,10 @@ class CommonalitiesLanguageGlobalScopeProvider extends TypesAwareDefaultGlobalSc
private def _getScope(Resource resource, EReference reference) {
switch (reference) {
- case PARTICIPATION_CLASS__SUPER_METACLASS:
- allMetaclassesScope.get()
+ case METAMODEL_IMPORT__PACKAGE:
+ return packagesScope.get()
+ case PARTICIPATION_CLASS__SUPER_METACLASS:
+ new MetamodelMetaclassesScope(resource, descriptionProvider, metamodelProvider)
case COMMONALITY_REFERENCE__REFERENCE_TYPE: // self scope
resource.localCommonalityScope
case COMMONALITY_ATTRIBUTE_REFERENCE__COMMONALITY: // self scope
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/MetamodelMetaclassesScope.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/MetamodelMetaclassesScope.xtend
new file mode 100644
index 0000000000..cd4547fd67
--- /dev/null
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/MetamodelMetaclassesScope.xtend
@@ -0,0 +1,78 @@
+package tools.vitruv.dsls.commonalities.scoping
+
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.xtext.EcoreUtil2
+import org.eclipse.xtext.naming.QualifiedName
+import org.eclipse.xtext.scoping.IScope
+import tools.vitruv.dsls.commonalities.names.IEObjectDescriptionProvider
+
+import static extension tools.vitruv.dsls.commonalities.names.QualifiedNameHelper.*
+import tools.vitruv.dsls.commonalities.language.elements.MetamodelProvider
+import org.eclipse.emf.ecore.resource.Resource
+import tools.vitruv.dsls.common.elements.MetamodelImport
+import tools.vitruv.dsls.common.elements.ElementsPackage
+import java.util.Set
+import java.util.HashSet
+import org.eclipse.xtend.lib.annotations.Data
+import org.eclipse.emf.ecore.EPackage
+
+class MetamodelMetaclassesScope implements IScope {
+ val IEObjectDescriptionProvider descriptionProvider
+ val MetamodelProvider metamodelProvider
+ val Set metamodelNames = new HashSet
+
+ new(Resource resource, IEObjectDescriptionProvider descriptionProvider, MetamodelProvider provider) {
+ this.descriptionProvider = descriptionProvider
+ this.metamodelProvider = provider
+ val importedMetamodels = resource.extractImportedMetamodels
+ this.metamodelNames += importedMetamodels.map[name].toSet
+ importedMetamodels.forEach[metamodelProvider.registerReferencedMetamodel(name, ePackage)]
+ }
+
+ @Data
+ static class ImportedMetamodel {
+ val String name
+ val EPackage ePackage
+ }
+
+ private def extractImportedMetamodels(Resource res) {
+ var imports = res.allContents.filter[eClass == ElementsPackage.eINSTANCE.getMetamodelImport].toList.filter(
+ MetamodelImport).filter[package !== null]
+ val importedMetamodels = imports.map [
+ new ImportedMetamodel(it.name ?: it.package.name, it.package)
+ ]
+ return importedMetamodels
+ }
+
+ override getAllElements() {
+ metamodelNames.map[metamodelProvider.getMetamodelByName(it)].flatMap[metaclasses].map(descriptionProvider)
+ }
+
+ override getElements(QualifiedName qName) {
+ val metamodelName = qName.metamodelName
+ if(metamodelName === null || !metamodelNames.contains(metamodelName)) return #[]
+ val className = qName.className
+ if(className === null) return #[]
+
+ return (metamodelProvider.getMetamodelByName(metamodelName)?.metaclasses ?: #[]). //
+ filter[name == className].map(descriptionProvider)
+ }
+
+ override getElements(EObject object) {
+ val objectURI = EcoreUtil2.getURI(object)
+ return allElements.filter[it.EObjectOrProxy === object || it.EObjectURI == objectURI]
+ }
+
+ override getSingleElement(QualifiedName name) {
+ getElements(name).head
+ }
+
+ override getSingleElement(EObject object) {
+ getElements(object).head
+ }
+
+ override toString() {
+ '''«MetamodelMetaclassesScope.simpleName» for metamodels «metamodelNames»'''
+ }
+
+}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/ParticipationClassesScope.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/ParticipationClassesScope.xtend
index 8c80f3ed1d..71c6cba198 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/ParticipationClassesScope.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/ParticipationClassesScope.xtend
@@ -25,13 +25,13 @@ class ParticipationClassesScope implements IScope {
}
override getElements(QualifiedName qName) {
- val domainName = qName.domainName
- if (domainName === null) return emptyList()
+ val metamodelName = qName.metamodelName
+ if (metamodelName === null) return emptyList()
val className = qName.className
if (className === null) return emptyList()
return commonality.participations
- .filter [name == domainName]
+ .filter [name == metamodelName]
.flatMap [allClasses]
.filter [name == className]
.map(descriptionProvider)
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/VitruvDomainMetaclassesScope.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/VitruvDomainMetaclassesScope.xtend
deleted file mode 100644
index 6eabe1ed07..0000000000
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/scoping/VitruvDomainMetaclassesScope.xtend
+++ /dev/null
@@ -1,51 +0,0 @@
-package tools.vitruv.dsls.commonalities.scoping
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import org.eclipse.emf.ecore.EObject
-import org.eclipse.xtext.EcoreUtil2
-import org.eclipse.xtext.naming.QualifiedName
-import org.eclipse.xtext.scoping.IScope
-import tools.vitruv.dsls.commonalities.language.elements.VitruviusDomainProvider
-import tools.vitruv.dsls.commonalities.names.IEObjectDescriptionProvider
-
-import static extension tools.vitruv.dsls.commonalities.names.QualifiedNameHelper.*
-
-@Singleton
-class VitruvDomainMetaclassesScope implements IScope {
-
- @Inject VitruviusDomainProvider vitruviusDomainProvider
- @Inject IEObjectDescriptionProvider descriptionProvider
-
- override getAllElements() {
- vitruviusDomainProvider.allDomains.flatMap[metaclasses].map(descriptionProvider)
- }
-
- override getElements(QualifiedName qName) {
- val domainName = qName.domainName
- if (domainName === null) return #[]
- val className = qName.className
- if (className === null) return #[]
-
- return (vitruviusDomainProvider.getDomainByName(domainName)?.metaclasses ?: #[])
- .filter[name == className]
- .map(descriptionProvider)
- }
-
- override getElements(EObject object) {
- val objectURI = EcoreUtil2.getURI(object)
- return allElements.filter[it.EObjectOrProxy === object || it.EObjectURI == objectURI]
- }
-
- override getSingleElement(QualifiedName name) {
- getElements(name).head
- }
-
- override getSingleElement(EObject object) {
- getElements(object).head
- }
-
- override toString() {
- '''«VitruvDomainMetaclassesScope.simpleName» for domains «vitruviusDomainProvider.allDomains.toList»'''
- }
-}
diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/workflow/generate.mwe2 b/bundles/dsls/tools.vitruv.dsls.commonalities/workflow/generate.mwe2
index 224af6d6d5..b021dcebf6 100644
--- a/bundles/dsls/tools.vitruv.dsls.commonalities/workflow/generate.mwe2
+++ b/bundles/dsls/tools.vitruv.dsls.commonalities/workflow/generate.mwe2
@@ -15,7 +15,11 @@ var testBasePath = "${testRootPath}/${baseName}"
var languageElementsModel = "platform:/resource/${baseName}/model/LanguageElements.genmodel"
Workflow {
-
+ bean = tools.vitruv.dsls.common.elements.RemapEcoreModel {
+ from = "http://www.eclipse.org/emf/2002/Ecore"
+ to = "platform:/resource/org.eclipse.emf.ecore/model/Ecore.ecore"
+ }
+
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
@@ -50,8 +54,7 @@ Workflow {
junitSupport = {
junitVersion = "5"
}
- // not used as of now:
- //referencedResource = "platform:/resource/tools.vitruv.dsls.mirbase/model/generated/MirBase.genmodel"
+ referencedResource = "platform:/resource/tools.vitruv.dsls.common/model/CommonLanguageElements.genmodel"
}
}
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings.ui/src/tools/vitruv/dsls/mappings/ui/validation/MappingsLanguageEclipseValidator.xtend b/bundles/dsls/tools.vitruv.dsls.mappings.ui/src/tools/vitruv/dsls/mappings/ui/validation/MappingsLanguageEclipseValidator.xtend
index 4d17389738..496dc7f879 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings.ui/src/tools/vitruv/dsls/mappings/ui/validation/MappingsLanguageEclipseValidator.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.mappings.ui/src/tools/vitruv/dsls/mappings/ui/validation/MappingsLanguageEclipseValidator.xtend
@@ -5,15 +5,8 @@ import tools.vitruv.dsls.mappings.mappingsLanguage.MappingsFile
import tools.vitruv.dsls.common.ui.validation.ProjectValidation
import org.eclipse.xtext.validation.Check
import tools.vitruv.extensions.dslsruntime.mappings.marker.RuntimeProjectMarker
-import tools.vitruv.dsls.common.elements.DomainReference
-import tools.vitruv.dsls.common.ui.elements.CommonLanguageElementsEclipseValidation
class MappingsLanguageEclipseValidator extends MappingsLanguageValidator {
- @Check(NORMAL)
- def checkDomainDependency(DomainReference domainReference) {
- CommonLanguageElementsEclipseValidation.checkDomainDependency(this, services.typeReferences, domainReference)
- }
-
@Check(NORMAL)
def checkMappingBaseFile(MappingsFile mappingsFile) {
ProjectValidation.checkIsJavaPluginProject(this, mappingsFile)
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/MappingsLanguage.xtext b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/MappingsLanguage.xtext
index c9bd0bc383..f6a56a5772 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/MappingsLanguage.xtext
+++ b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/MappingsLanguage.xtext
@@ -13,8 +13,8 @@ MappingsFile:
MappingsSegment:
'mappings:' name=ValidID
- 'for' leftDomain=DomainReference
- 'and' rightDomain=DomainReference
+ 'for' leftMetamodels+=[common::MetamodelImport] (',' leftMetamodels+=[common::MetamodelImport])*
+ 'and' rightMetamodels+=[common::MetamodelImport] (',' rightMetamodels+=[common::MetamodelImport])*
(mappings+=Mapping |
bootstrappings+=Bootstrapping)*;
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingParameterExtractor.xtend b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingParameterExtractor.xtend
index 0aa71df621..5d6a03f796 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingParameterExtractor.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingParameterExtractor.xtend
@@ -3,18 +3,17 @@ package tools.vitruv.dsls.mappings.generator
import java.util.List
import tools.vitruv.dsls.mappings.mappingsLanguage.Mapping
import tools.vitruv.dsls.mappings.mappingsLanguage.MappingParameter
-import tools.vitruv.dsls.common.elements.DomainReference
import org.eclipse.emf.ecore.EPackage
-import tools.vitruv.framework.domains.VitruvDomainProviderRegistry
+import java.util.Set
class MappingParameterExtractor {
- var DomainReference targetDomain
+ var Set targetMetamodelPackages
var Mapping mapping
var boolean leftSide
- new(DomainReference targetDomain) {
- this.targetDomain = targetDomain
+ new(Set targetMetamodelPackages) {
+ this.targetMetamodelPackages = targetMetamodelPackages
}
/**
@@ -47,8 +46,7 @@ class MappingParameterExtractor {
private def isParameterFromTargetDomain(MappingParameter parameter) {
val parameterPackage = parameter.value.metamodel.package
- val targetDomainRootPackage = VitruvDomainProviderRegistry.getDomainProvider(targetDomain.domain)?.domain.metamodelRootPackage
- return parameterPackage.isPackageOrSubpackage(targetDomainRootPackage)
+ return targetMetamodelPackages.exists[parameterPackage.isPackageOrSubpackage(it)]
}
private static def boolean isPackageOrSubpackage(EPackage consideredPackage, EPackage packageToSearchIn) {
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingsReactionsFileGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingsReactionsFileGenerator.xtend
index dc155ad01c..5285e055d9 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingsReactionsFileGenerator.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/MappingsReactionsFileGenerator.xtend
@@ -33,14 +33,14 @@ class MappingsReactionsFileGenerator {
private def createAndInitializeFile() {
val reactionsFile = create.reactionsFile(directedSegmentName)
- val segmentBuilder = create.reactionsSegment(directedSegmentName).inReactionToChangesIn(fromDomain.domain).
- executeActionsIn(toDomain.domain)
+ val segmentBuilder = create.reactionsSegment(directedSegmentName).inReactionToChangesIn(fromMetamodels.map[package].toSet).
+ executeActionsIn(toMetamodels.map[package].toSet)
reactionsFile += segmentBuilder
context = new MappingGeneratorContext(reactionsFile, segmentBuilder, segment, mappingsFile, create, left2right)
}
private def generateReactionsAndRoutines() {
- val extractor = new MappingParameterExtractor(fromDomain)
+ val extractor = new MappingParameterExtractor(fromMetamodels.map[package].toSet)
segment.mappings.forEach [
extractor.extract(it)
val from = extractor.fromParameters
@@ -56,12 +56,12 @@ class MappingsReactionsFileGenerator {
]
}
- private def getFromDomain() {
- if(left2right) segment.leftDomain else segment.rightDomain
+ private def getFromMetamodels() {
+ if(left2right) segment.leftMetamodels else segment.rightMetamodels
}
- private def getToDomain() {
- if(left2right) segment.rightDomain else segment.leftDomain
+ private def getToMetamodels() {
+ if(left2right) segment.rightMetamodels else segment.leftMetamodels
}
private def String getDirectedSegmentName() '''«segment.name»«directionSuffix»'''
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/integration/StandaloneReactionIntegration.xtend b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/integration/StandaloneReactionIntegration.xtend
index 6eec1f1b9c..eca42158b8 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/integration/StandaloneReactionIntegration.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/integration/StandaloneReactionIntegration.xtend
@@ -15,15 +15,15 @@ class StandaloneReactionIntegration implements IReactionIntegrateable{
new(MappingsSegment segment, boolean l2r){
reactionsSegment = TopLevelElementsFactory.eINSTANCE.createReactionsSegment
reactionsSegment.name = segment.name+'Integration'
- reactionsSegment.fromDomain = getDomain(segment, l2r)
- reactionsSegment.toDomain = getDomain(segment, !l2r)
+ reactionsSegment.fromMetamodels += getMetamodels(segment, l2r)
+ reactionsSegment.toMetamodels += getMetamodels(segment, !l2r)
}
- private def getDomain(MappingsSegment segment, boolean l2r){
+ private def getMetamodels(MappingsSegment segment, boolean l2r){
if(l2r){
- return segment.leftDomain
+ return segment.leftMetamodels
}else {
- return segment.rightDomain
+ return segment.rightMetamodels
}
}
diff --git a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/utils/ParameterCorrespondenceTagging.xtend b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/utils/ParameterCorrespondenceTagging.xtend
index 2b3081922a..51831ba38e 100644
--- a/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/utils/ParameterCorrespondenceTagging.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.mappings/src/tools/vitruv/dsls/mappings/generator/utils/ParameterCorrespondenceTagging.xtend
@@ -34,5 +34,5 @@ class ParameterCorrespondenceTagging {
«parameter.metaclass.name»:«parameter.name»'''
private static def String createMappingContext() '''
- «context.segment.name»_map_«context.segment.leftDomain.domain»_and_«context.segment.rightDomain.domain»'''
+ «context.segment.name»_map_«context.segment.leftMetamodels.map[name].join»_and_«context.segment.rightMetamodels.map[name].join»'''
}
diff --git a/bundles/dsls/tools.vitruv.dsls.reactions.ui/src/tools/vitruv/dsls/reactions/ui/validation/ReactionsLanguageEclipseValidator.xtend b/bundles/dsls/tools.vitruv.dsls.reactions.ui/src/tools/vitruv/dsls/reactions/ui/validation/ReactionsLanguageEclipseValidator.xtend
index 06ec9ccd0d..9794ec90ce 100644
--- a/bundles/dsls/tools.vitruv.dsls.reactions.ui/src/tools/vitruv/dsls/reactions/ui/validation/ReactionsLanguageEclipseValidator.xtend
+++ b/bundles/dsls/tools.vitruv.dsls.reactions.ui/src/tools/vitruv/dsls/reactions/ui/validation/ReactionsLanguageEclipseValidator.xtend
@@ -2,18 +2,12 @@ package tools.vitruv.dsls.reactions.ui.validation
import tools.vitruv.dsls.reactions.validation.ReactionsLanguageValidator
import org.eclipse.xtext.validation.Check
-import tools.vitruv.dsls.common.elements.DomainReference
import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsFile
import tools.vitruv.dsls.common.ui.validation.ProjectValidation
import tools.vitruv.extensions.dslsruntime.reactions.marker.RuntimeProjectMarker
-import tools.vitruv.dsls.common.ui.elements.CommonLanguageElementsEclipseValidation
+import tools.vitruv.dsls.common.elements.MetamodelImport
class ReactionsLanguageEclipseValidator extends ReactionsLanguageValidator {
- @Check(NORMAL)
- def checkDomainDependency(DomainReference domainReference) {
- CommonLanguageElementsEclipseValidation.checkDomainDependency(this, services.typeReferences, domainReference)
- }
-
@Check(NORMAL)
override checkReactionsFile(ReactionsFile reactionsFile) {
super.checkReactionsFile(reactionsFile)
@@ -21,4 +15,12 @@ class ReactionsLanguageEclipseValidator extends ReactionsLanguageValidator {
ProjectValidation.checkRuntimeProjectIsOnClasspath(this, services.typeReferences, RuntimeProjectMarker,
reactionsFile)
}
+
+ @Check(NORMAL)
+ def checkMetamodelOnClasspath(MetamodelImport metamodelImport) {
+ if (metamodelImport.package !== null) {
+ ProjectValidation.checkMetamodelProjectIsOnClasspath(this, services.typeReferences, metamodelImport.package,
+ metamodelImport)
+ }
+ }
}
diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/model/TopLevelElements.ecore b/bundles/dsls/tools.vitruv.dsls.reactions/model/TopLevelElements.ecore
index dcb24de1d9..9fadb1a600 100644
--- a/bundles/dsls/tools.vitruv.dsls.reactions/model/TopLevelElements.ecore
+++ b/bundles/dsls/tools.vitruv.dsls.reactions/model/TopLevelElements.ecore
@@ -13,10 +13,10 @@