diff --git a/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/families2persons/FamiliesToPersons.reactions b/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/families2persons/FamiliesToPersons.reactions index 0d682a636a..a73a93af76 100644 --- a/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/families2persons/FamiliesToPersons.reactions +++ b/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/families2persons/FamiliesToPersons.reactions @@ -1,285 +1,286 @@ -import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertFemale -import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertMale -import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertValidFirstname - -import static extension tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.getPersonName -import static extension tools.vitruv.domains.demo.families.FamiliesUtil.getMembers -import static extension tools.vitruv.domains.demo.families.FamiliesUtil.getRegister - -import "edu.kit.ipd.sdq.metamodels.persons" as persons -import "edu.kit.ipd.sdq.metamodels.families" as families - -reactions: familiesToPersons -in reaction to changes in Families -execute actions in Persons - -//========== FAMILY-REGISTER ========== -//Creation of a {@link PersonRegister} after a {@link FamilyRegister} was created. -reaction CreatedFamilyRegister { - after element families::FamilyRegister created and inserted as root - call createPersonRegister(newValue) -} -routine createPersonRegister(families::FamilyRegister familyRegister) { - action { - val personRegister = create persons::PersonRegister and initialize { - persistProjectRelative(familyRegister, personRegister, "model/persons.persons") - } - add correspondence between personRegister and familyRegister - } -} -//Deletion of a {@link PersonRegister} after a {@link FamilyRegister} was deleted. -reaction DeletedFamilyRegister { - after element families::FamilyRegister deleted - call deletePersonRegister(affectedEObject) -} -routine deletePersonRegister(families::FamilyRegister familyRegister) { - match { - val personRegister = retrieve persons::PersonRegister corresponding to familyRegister - } - action { - delete personRegister - } -} - - -//========== FAMILY ========== -reaction DeletedFamily { - after element families::Family deleted - call affectedEObject.members.forEach[deletePerson()] -} -//Lastname of {@link Family} changed. -reaction ChangedLastName { - after attribute replaced at families::Family[lastName] - call affectedEObject.members.forEach[updatePersonName(it)] -} - -reaction CreatedFather { - after element families::Member replaced at families::Family[father] - with newValue !== null - call { - updateNameAndCorrespondencesAfterMemberBecameFather(newValue, affectedEObject) - createMaleFromNewMember(newValue, affectedEObject) - } -} - -reaction CreatedMother { - after element families::Member replaced at families::Family[mother] - with newValue !== null - call { - updateNameAndCorrespondencesAfterMemberBecameMother(newValue, affectedEObject) - createFemaleFromNewMember(newValue, affectedEObject) - } -} - -//New member for the position of the son was newly created and inserted, so a corresponding person has to be created. -reaction CreatedAndInsertedSon { - after element families::Member created and inserted in families::Family[sons] - call createMale(newValue, affectedEObject) -} -//New member for the position of the son already existed before, so old correspondences have to be updated. -reaction InsertedSon { - after element families::Member inserted in families::Family[sons] - call existingMemberBecameSon_updateNameAndCorrespondencesOfCorrespondingMale(newValue, affectedEObject) -} -//New member for the position of the daughter was newly created and inserted, so a corresponding person has to be created. -reaction CreatedAndInsertedDaughter { - after element families::Member created and inserted in families::Family[daughters] - call createFemale(newValue, affectedEObject) -} -//New member for the position of the daughter already existed before, so old correspondences have to be updated. -reaction InsertedDaughter { - after element families::Member inserted in families::Family[daughters] - call existingMemberBecameDaughter_updateNameAndCorrespondencesOfCorrespondingFemale(newValue, affectedEObject) -} - -//Checks whether the newFather was actually just created (has no corresponding person) or not. -//Only continues if newFather is a newly created member. -routine createMaleFromNewMember(families::Member newFather, families::Family family) { - match { - require absence of persons::Person corresponding to newFather - } - action { - call createMale(newFather, family) - } -} - -//Creates corresponding male person for fathers and sons and sets up correspondences -routine createMale(families::Member newMember, families::Family family) { - match { - check { assertValidFirstname(newMember) true } - val personsRegister = retrieve persons::PersonRegister corresponding to family.register - } - action { - val person = create persons::Male and initialize { - person.fullName = newMember.getPersonName - } - update personsRegister { - personsRegister.persons += person - } - add correspondence between newMember and person - add correspondence between family and person - } -} - -//Checks whether the newMother was actually just created (has no corresponding person) or not. -//Only continues if newMother is a newly created member. -routine createFemaleFromNewMember(families::Member newMother, families::Family family) { - match { - require absence of persons::Person corresponding to newMother - } - action { - call createFemale(newMother, family) - } -} - -//Creates corresponding female person for mothers and daughters and sets up correspondences -routine createFemale(families::Member newMember, families::Family family) { - match { - check { assertValidFirstname(newMember) true } - val personsRegister = retrieve persons::PersonRegister corresponding to family.register - } - action { - val person = create persons::Female and initialize { - person.fullName = newMember.getPersonName - } - update personsRegister { - personsRegister.persons += person - } - add correspondence between newMember and person - add correspondence between family and person - } -} - -//First check if the newFather existed before (otherwise break) and if so: -// newFather is the member that existed before but now becomes the new father -// newFamily is the family in which the newFather is from now on the father -routine updateNameAndCorrespondencesAfterMemberBecameFather(families::Member newFather, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to newFather - with { assertMale(correspondingPerson) true } - } - action { - call updateNameAndCorrespondencesOfCorrespondingPerson(newFather, newFamily) - } -} - -//First check if the newMother existed before (otherwise break) and if so: -// newMother is the member that existed before but now becomes the new mother -// newFamily is the family in which the newMother is from now on the mother -routine updateNameAndCorrespondencesAfterMemberBecameMother(families::Member newMother, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to newMother - with { assertFemale(correspondingPerson) true } - } - action { - call updateNameAndCorrespondencesOfCorrespondingPerson(newMother, newFamily) - } -} - -//newMember is the member that existed before but now becomes the new parent -//correspondingPerson - The correspondence to the family has to change -//newFamily is the family in which the newMember will be parent from now on -//oldFamily is the family in which the newMember was until now -routine updateNameAndCorrespondencesOfCorrespondingPerson(families::Member newMember, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to newMember - val oldFamily = retrieve families::Family corresponding to correspondingPerson - } - action { - update correspondingPerson { - correspondingPerson.fullName = newMember.personName - } - remove correspondence between correspondingPerson and oldFamily - add correspondence between correspondingPerson and newFamily - call deleteFamilyIfEmpty(oldFamily) - } -} - -//First check if insertedChild is actually male which it has to be in order to become a son. -routine existingMemberBecameSon_updateNameAndCorrespondencesOfCorrespondingMale(families::Member insertedChild, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to insertedChild - with { assertMale(correspondingPerson) true } - } - action { - call updatePersonFamilyCorrespondence(insertedChild, newFamily) - } -} - -//First check if insertedChild is actually female which it has to be in order to become a daughter. -routine existingMemberBecameDaughter_updateNameAndCorrespondencesOfCorrespondingFemale(families::Member insertedChild, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to insertedChild - with { assertFemale(correspondingPerson) true } - } - action { - call updatePersonFamilyCorrespondence(insertedChild, newFamily) - } -} - -//insertedChild is the member that just became a son or daughter. Before, it could have been a parent as well as a child. -//correspondingPerson gets a new name (since most likely the lastname changed) and correspondences are updated. -//newFamily is the family in which the insertedChild is now contained. -//oldFamily is the family in which the insertedChild was a member before. -routine updatePersonFamilyCorrespondence (families::Member insertedChild, families::Family newFamily) { - match { - val correspondingPerson = retrieve persons::Person corresponding to insertedChild - val oldFamily = retrieve families::Family corresponding to correspondingPerson - } - action { - update correspondingPerson { - correspondingPerson.fullName = insertedChild.personName - } - remove correspondence between correspondingPerson and oldFamily - add correspondence between correspondingPerson and newFamily - call deleteFamilyIfEmpty(oldFamily) - } -} - -//========== MEMBER IN GENERAL ========== -//Firstname of {@link Member} changed. -reaction ChangedFirstName { - after attribute replaced at families::Member[firstName] - call updatePersonName(affectedEObject) -} - -//Check if the new name is allowed and then update the name of the corresponding person. -routine updatePersonName(families::Member member) { - match { - check { assertValidFirstname(member) true } - val person = retrieve persons::Person corresponding to member - } - action { - update person { - person.fullName = member.getPersonName - } - } -} - -reaction DeletedMember { - after element families::Member deleted - call deletePerson(affectedEObject) -} - -//Delete the corresponding person after member was deleted and -//also remove any correspondences including either the member or the person. -routine deletePerson(families::Member member) { - match { - val person = retrieve persons::Person corresponding to member - val family = retrieve families::Family corresponding to person - } - action { - remove correspondence between member and person - remove correspondence between family and person - delete person - } -} - -routine deleteFamilyIfEmpty(families::Family family) { - match { - check family.members.size == 0 - } - action { - call family.register.families.^remove(family) - } +import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertFemale +import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertMale +import static tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.assertValidFirstname + +import static extension tools.vitruv.applications.demo.familiespersons.families2persons.FamiliesToPersonsHelper.getPersonName +import static extension tools.vitruv.domains.demo.families.FamiliesUtil.getMembers +import static extension tools.vitruv.domains.demo.families.FamiliesUtil.getRegister + +import "edu.kit.ipd.sdq.metamodels.persons" as persons +import "edu.kit.ipd.sdq.metamodels.families" as families + +reactions: familiesToPersons +in reaction to changes in families +execute actions in persons + +//========== FAMILY-REGISTER ========== +//Creation of a {@link PersonRegister} after a {@link FamilyRegister} was created. +reaction CreatedFamilyRegister { + after element families::FamilyRegister created and inserted as root + call createPersonRegister(newValue) +} +routine createPersonRegister(families::FamilyRegister familyRegister) { + action { + val personRegister = create persons::PersonRegister and initialize { + persistProjectRelative(familyRegister, personRegister, "model/persons.persons") + } + add correspondence between personRegister and familyRegister + } +} +//Deletion of a {@link PersonRegister} after a {@link FamilyRegister} was deleted. +reaction DeletedFamilyRegister { + after element families::FamilyRegister deleted + call deletePersonRegister(affectedEObject) +} +routine deletePersonRegister(families::FamilyRegister familyRegister) { + match { + val personRegister = retrieve persons::PersonRegister corresponding to familyRegister + } + action { + delete personRegister + } +} + + +//========== FAMILY ========== +reaction DeletedFamily { + after element families::Family deleted + call affectedEObject.members.forEach[deletePerson()] +} +//Lastname of {@link Family} changed. +reaction ChangedLastName { + after attribute replaced at families::Family[lastName] + call affectedEObject.members.forEach[updatePersonName(it)] +} + +reaction CreatedFather { + after element families::Member replaced at families::Family[father] + with newValue !== null + call { + updateNameAndCorrespondencesAfterMemberBecameFather(newValue, affectedEObject) + createMaleFromNewMember(newValue, affectedEObject) + } +} + +reaction CreatedMother { + after element families::Member replaced at families::Family[mother] + with newValue !== null + call { + updateNameAndCorrespondencesAfterMemberBecameMother(newValue, affectedEObject) + createFemaleFromNewMember(newValue, affectedEObject) + } +} + +//New member for the position of the son was newly created and inserted, so a corresponding person has to be created. +reaction CreatedAndInsertedSon { + after element families::Member created and inserted in families::Family[sons] + call createMale(newValue, affectedEObject) +} +//New member for the position of the son already existed before, so old correspondences have to be updated. +reaction InsertedSon { + after element families::Member inserted in families::Family[sons] + call existingMemberBecameSon_updateNameAndCorrespondencesOfCorrespondingMale(newValue, affectedEObject) +} + +//New member for the position of the daughter was newly created and inserted, so a corresponding person has to be created. +reaction CreatedAndInsertedDaughter { + after element families::Member created and inserted in families::Family[daughters] + call createFemale(newValue, affectedEObject) +} +//New member for the position of the daughter already existed before, so old correspondences have to be updated. +reaction InsertedDaughter { + after element families::Member inserted in families::Family[daughters] + call existingMemberBecameDaughter_updateNameAndCorrespondencesOfCorrespondingFemale(newValue, affectedEObject) +} + +//Checks whether the newFather was actually just created (has no corresponding person) or not. +//Only continues if newFather is a newly created member. +routine createMaleFromNewMember(families::Member newFather, families::Family family) { + match { + require absence of persons::Person corresponding to newFather + } + action { + call createMale(newFather, family) + } +} + +//Creates corresponding male person for fathers and sons and sets up correspondences +routine createMale(families::Member newMember, families::Family family) { + match { + check { assertValidFirstname(newMember) true } + val personsRegister = retrieve persons::PersonRegister corresponding to family.register + } + action { + val person = create persons::Male and initialize { + person.fullName = newMember.getPersonName + } + update personsRegister { + personsRegister.persons += person + } + add correspondence between newMember and person + add correspondence between family and person + } +} + +//Checks whether the newMother was actually just created (has no corresponding person) or not. +//Only continues if newMother is a newly created member. +routine createFemaleFromNewMember(families::Member newMother, families::Family family) { + match { + require absence of persons::Person corresponding to newMother + } + action { + call createFemale(newMother, family) + } +} + +//Creates corresponding female person for mothers and daughters and sets up correspondences +routine createFemale(families::Member newMember, families::Family family) { + match { + check { assertValidFirstname(newMember) true } + val personsRegister = retrieve persons::PersonRegister corresponding to family.register + } + action { + val person = create persons::Female and initialize { + person.fullName = newMember.getPersonName + } + update personsRegister { + personsRegister.persons += person + } + add correspondence between newMember and person + add correspondence between family and person + } +} + +//First check if the newFather existed before (otherwise break) and if so: +// newFather is the member that existed before but now becomes the new father +// newFamily is the family in which the newFather is from now on the father +routine updateNameAndCorrespondencesAfterMemberBecameFather(families::Member newFather, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to newFather + with { assertMale(correspondingPerson) true } + } + action { + call updateNameAndCorrespondencesOfCorrespondingPerson(newFather, newFamily) + } +} + +//First check if the newMother existed before (otherwise break) and if so: +// newMother is the member that existed before but now becomes the new mother +// newFamily is the family in which the newMother is from now on the mother +routine updateNameAndCorrespondencesAfterMemberBecameMother(families::Member newMother, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to newMother + with { assertFemale(correspondingPerson) true } + } + action { + call updateNameAndCorrespondencesOfCorrespondingPerson(newMother, newFamily) + } +} + +//newMember is the member that existed before but now becomes the new parent +//correspondingPerson - The correspondence to the family has to change +//newFamily is the family in which the newMember will be parent from now on +//oldFamily is the family in which the newMember was until now +routine updateNameAndCorrespondencesOfCorrespondingPerson(families::Member newMember, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to newMember + val oldFamily = retrieve families::Family corresponding to correspondingPerson + } + action { + update correspondingPerson { + correspondingPerson.fullName = newMember.personName + } + remove correspondence between correspondingPerson and oldFamily + add correspondence between correspondingPerson and newFamily + call deleteFamilyIfEmpty(oldFamily) + } +} + +//First check if insertedChild is actually male which it has to be in order to become a son. +routine existingMemberBecameSon_updateNameAndCorrespondencesOfCorrespondingMale(families::Member insertedChild, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to insertedChild + with { assertMale(correspondingPerson) true } + } + action { + call updatePersonFamilyCorrespondence(insertedChild, newFamily) + } +} + +//First check if insertedChild is actually female which it has to be in order to become a daughter. +routine existingMemberBecameDaughter_updateNameAndCorrespondencesOfCorrespondingFemale(families::Member insertedChild, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to insertedChild + with { assertFemale(correspondingPerson) true } + } + action { + call updatePersonFamilyCorrespondence(insertedChild, newFamily) + } +} + +//insertedChild is the member that just became a son or daughter. Before, it could have been a parent as well as a child. +//correspondingPerson gets a new name (since most likely the lastname changed) and correspondences are updated. +//newFamily is the family in which the insertedChild is now contained. +//oldFamily is the family in which the insertedChild was a member before. +routine updatePersonFamilyCorrespondence (families::Member insertedChild, families::Family newFamily) { + match { + val correspondingPerson = retrieve persons::Person corresponding to insertedChild + val oldFamily = retrieve families::Family corresponding to correspondingPerson + } + action { + update correspondingPerson { + correspondingPerson.fullName = insertedChild.personName + } + remove correspondence between correspondingPerson and oldFamily + add correspondence between correspondingPerson and newFamily + call deleteFamilyIfEmpty(oldFamily) + } +} + +//========== MEMBER IN GENERAL ========== +//Firstname of {@link Member} changed. +reaction ChangedFirstName { + after attribute replaced at families::Member[firstName] + call updatePersonName(affectedEObject) +} + +//Check if the new name is allowed and then update the name of the corresponding person. +routine updatePersonName(families::Member member) { + match { + check { assertValidFirstname(member) true } + val person = retrieve persons::Person corresponding to member + } + action { + update person { + person.fullName = member.getPersonName + } + } +} + +reaction DeletedMember { + after element families::Member deleted + call deletePerson(affectedEObject) +} + +//Delete the corresponding person after member was deleted and +//also remove any correspondences including either the member or the person. +routine deletePerson(families::Member member) { + match { + val person = retrieve persons::Person corresponding to member + val family = retrieve families::Family corresponding to person + } + action { + remove correspondence between member and person + remove correspondence between family and person + delete person + } +} + +routine deleteFamilyIfEmpty(families::Family family) { + match { + check family.members.size == 0 + } + action { + call family.register.families.^remove(family) + } } \ No newline at end of file diff --git a/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/persons2families/PersonsToFamilies.reactions b/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/persons2families/PersonsToFamilies.reactions index 57d51c6a94..079aa1ba82 100644 --- a/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/persons2families/PersonsToFamilies.reactions +++ b/bundles/applications/tools.vitruv.applications.demo.familiespersons/src/tools/vitruv/applications/demo/familiespersons/persons2families/PersonsToFamilies.reactions @@ -19,8 +19,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons import "edu.kit.ipd.sdq.metamodels.families" as families reactions: personsToFamilies -in reaction to changes in Persons -execute actions in Families +in reaction to changes in persons +execute actions in families // ================================= // Creation/ deletion of a registers diff --git a/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/insurance2persons/InsuranceToPersons.reactions b/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/insurance2persons/InsuranceToPersons.reactions index a610151240..17be82d60b 100644 --- a/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/insurance2persons/InsuranceToPersons.reactions +++ b/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/insurance2persons/InsuranceToPersons.reactions @@ -8,8 +8,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons import "edu.kit.ipd.sdq.metamodels.insurance" as insurance reactions: insuranceToPersons -in reaction to changes in Insurance -execute actions in Persons +in reaction to changes in insurance +execute actions in persons reaction CreatedInsuranceDatabase { after element insurance::InsuranceDatabase created and inserted as root diff --git a/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/persons2insurance/PersonsToInsurance.reactions b/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/persons2insurance/PersonsToInsurance.reactions index 1f7080efae..a3be795d1d 100644 --- a/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/persons2insurance/PersonsToInsurance.reactions +++ b/bundles/applications/tools.vitruv.applications.demo.insurancepersons/src/tools/vitruv/applications/demo/insurancepersons/persons2insurance/PersonsToInsurance.reactions @@ -8,8 +8,8 @@ import "edu.kit.ipd.sdq.metamodels.persons" as persons import "edu.kit.ipd.sdq.metamodels.insurance" as insurance reactions: personsToInsurance -in reaction to changes in Persons -execute actions in Insurance +in reaction to changes in persons +execute actions in insurance reaction CreatedPersonRegister { after element persons::PersonRegister created and inserted as root diff --git a/bundles/dsls/tools.vitruv.dsls.common.ui/META-INF/MANIFEST.MF b/bundles/dsls/tools.vitruv.dsls.common.ui/META-INF/MANIFEST.MF index 2dbbbcb9df..fec54ab73b 100644 --- a/bundles/dsls/tools.vitruv.dsls.common.ui/META-INF/MANIFEST.MF +++ b/bundles/dsls/tools.vitruv.dsls.common.ui/META-INF/MANIFEST.MF @@ -12,9 +12,9 @@ Require-Bundle: org.eclipse.xtend.lib, org.eclipse.ui.ide, org.eclipse.xtext.common.types, edu.kit.ipd.sdq.activextendannotations, - tools.vitruv.dsls.common;visibility:=reexport + tools.vitruv.dsls.common;visibility:=reexport, + edu.kit.ipd.sdq.commons.util.eclipse Export-Package: tools.vitruv.dsls.common.ui, - tools.vitruv.dsls.common.ui.elements, tools.vitruv.dsls.common.ui.quickfix, tools.vitruv.dsls.common.ui.validation Bundle-Vendor: vitruv.tools diff --git a/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/elements/CommonLanguageElementsEclipseValidation.xtend b/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/elements/CommonLanguageElementsEclipseValidation.xtend deleted file mode 100644 index 581ba9eca7..0000000000 --- a/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/elements/CommonLanguageElementsEclipseValidation.xtend +++ /dev/null @@ -1,19 +0,0 @@ -package tools.vitruv.dsls.common.ui.elements - -import tools.vitruv.dsls.common.elements.DomainReference -import org.eclipse.xtext.validation.ValidationMessageAcceptor -import tools.vitruv.dsls.common.ui.validation.ProjectValidation -import org.eclipse.xtext.common.types.util.TypeReferences -import tools.vitruv.dsls.common.elements.CommonLanguageElementsValidation - -class CommonLanguageElementsEclipseValidation { - - def static checkDomainDependency(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, - DomainReference domainReference) { - if (CommonLanguageElementsValidation.isValid(domainReference)) { - ProjectValidation.checkDomainProjectIsOnClasspath(acceptor, typeReferences, domainReference.domain, - domainReference) - } - } - -} diff --git a/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/validation/ProjectValidation.xtend b/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/validation/ProjectValidation.xtend index 0f7d4d22b6..183b987b84 100644 --- a/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/validation/ProjectValidation.xtend +++ b/bundles/dsls/tools.vitruv.dsls.common.ui/src/tools/vitruv/dsls/common/ui/validation/ProjectValidation.xtend @@ -7,9 +7,9 @@ import org.eclipse.xtext.validation.ValidationMessageAcceptor import static extension tools.vitruv.dsls.common.ui.ProjectAccess.* import org.eclipse.core.runtime.CoreException import edu.kit.ipd.sdq.activextendannotations.Utility -import tools.vitruv.framework.domains.VitruvDomainProviderRegistry import org.osgi.framework.FrameworkUtil import org.eclipse.xtext.common.types.util.TypeReferences +import org.eclipse.emf.ecore.EPackage @Utility class ProjectValidation { @@ -51,16 +51,15 @@ class ProjectValidation { "The runtime bundle is not on the classpath") } - def static checkDomainProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, - String requiredDomainName, EObject referenceObject) { - checkDomainProjectIsOnClasspath(acceptor, typeReferences, requiredDomainName, referenceObject, null) + def static checkMetamodelProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, + EPackage requiredPackage, EObject referenceObject) { + checkMetamodelProjectIsOnClasspath(acceptor, typeReferences, requiredPackage, referenceObject, null) } - def static checkDomainProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, - String requiredDomainName, EObject referenceObject, EStructuralFeature messageTargetFeature) { - val domainProviderClass = VitruvDomainProviderRegistry.getDomainProvider(requiredDomainName).class - checkOnClasspath(acceptor, typeReferences, domainProviderClass, referenceObject, - messageTargetFeature, '''«domainProviderClass.simpleName» is not on the classpath''') + def static checkMetamodelProjectIsOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, + EPackage requiredPackage, EObject referenceObject, EStructuralFeature messageTargetFeature) { + checkOnClasspath(acceptor, typeReferences, requiredPackage.class, referenceObject, + messageTargetFeature, '''The bundle providing EPackage "«requiredPackage.nsURI»" is not on the classpath''') } def private static checkOnClasspath(ValidationMessageAcceptor acceptor, TypeReferences typeReferences, diff --git a/bundles/dsls/tools.vitruv.dsls.common/META-INF/MANIFEST.MF b/bundles/dsls/tools.vitruv.dsls.common/META-INF/MANIFEST.MF index 8854239397..915ffa6096 100644 --- a/bundles/dsls/tools.vitruv.dsls.common/META-INF/MANIFEST.MF +++ b/bundles/dsls/tools.vitruv.dsls.common/META-INF/MANIFEST.MF @@ -10,8 +10,7 @@ Require-Bundle: org.eclipse.xtext, org.eclipse.xtext.xbase, org.eclipse.core.runtime, org.eclipse.emf.ecore;visibility:=reexport, - edu.kit.ipd.sdq.activextendannotations, - tools.vitruv.framework.domains;visibility:=reexport + edu.kit.ipd.sdq.activextendannotations Bundle-ActivationPolicy: lazy Export-Package: tools.vitruv.dsls.common, tools.vitruv.dsls.common.elements, diff --git a/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.ecore b/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.ecore index f87d7673e2..e71fd38413 100644 --- a/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.ecore +++ b/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.ecore @@ -22,7 +22,4 @@ - - - diff --git a/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.genmodel b/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.genmodel index 4aa1412e98..ae3ca59d0a 100644 --- a/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.genmodel +++ b/bundles/dsls/tools.vitruv.dsls.common/model/CommonLanguageElements.genmodel @@ -13,10 +13,6 @@ - - - - @@ -33,14 +29,5 @@ - - - - - - - - - diff --git a/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsInitialization.xtend b/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsInitialization.xtend deleted file mode 100644 index 467776211f..0000000000 --- a/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsInitialization.xtend +++ /dev/null @@ -1,11 +0,0 @@ -package tools.vitruv.dsls.common.elements - -import edu.kit.ipd.sdq.activextendannotations.Utility -import tools.vitruv.framework.domains.VitruvDomainProviderRegistry - -@Utility -class CommonLanguageElementsInitialization { - def static initializeVitruvDomainsRepository() { - VitruvDomainProviderRegistry.allDomainProviders - } -} \ No newline at end of file diff --git a/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsValidation.xtend b/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsValidation.xtend deleted file mode 100644 index 759d89afe6..0000000000 --- a/bundles/dsls/tools.vitruv.dsls.common/src/tools/vitruv/dsls/common/elements/CommonLanguageElementsValidation.xtend +++ /dev/null @@ -1,12 +0,0 @@ -package tools.vitruv.dsls.common.elements - -import tools.vitruv.framework.domains.VitruvDomainProviderRegistry - -class CommonLanguageElementsValidation { - - def static boolean isValid(DomainReference domainReference) { - val domainNames = VitruvDomainProviderRegistry.allDomainProviders.map[domain.name].toList - return domainNames.contains(domainReference.domain) - } - -} diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/DomainPrefixProposalFactory.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/DomainPrefixProposalFactory.xtend index fcb0c210dd..bbd1e8873d 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/DomainPrefixProposalFactory.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/DomainPrefixProposalFactory.xtend @@ -11,7 +11,7 @@ class DomainPrefixProposalFactory extends CommonalitiesLanguageProposalFactory { @Inject PrefixMatcher.IgnoreCase ignoreCase override apply(IEObjectDescription description) { - completionProposal(description.name.firstSegment + DOMAIN_METACLASS_SEPARATOR + '(') + completionProposal(description.name.firstSegment + METAMODEL_METACLASS_SEPARATOR + '(') .appendText(description.name.firstSegment) .withImageOf(description.EObjectOrProxy) .usePrefixMatcher(ignoreCase) diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/QualifiedMetaclassProposalFactory.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/QualifiedMetaclassProposalFactory.xtend index c5fb70d695..5e33a26c9a 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/QualifiedMetaclassProposalFactory.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/QualifiedMetaclassProposalFactory.xtend @@ -15,7 +15,7 @@ class QualifiedMetaclassProposalFactory extends CommonalitiesLanguageProposalFac override apply(IEObjectDescription description) { completionProposal(description.name) .appendText(description.name.firstSegment) - .appendText(DOMAIN_METACLASS_SEPARATOR) + .appendText(METAMODEL_METACLASS_SEPARATOR) .appendText(description.name.getSegment(1)) .withImageOf(description.EObjectOrProxy) .usePrefixMatcher(metaclassPrefixMatcher) diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/UnqualifiedMetaclassProposalFactory.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/UnqualifiedMetaclassProposalFactory.xtend index a9a110cc1d..faa342ec6a 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/UnqualifiedMetaclassProposalFactory.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/contentassist/UnqualifiedMetaclassProposalFactory.xtend @@ -13,7 +13,7 @@ class UnqualifiedMetaclassProposalFactory extends CommonalitiesLanguageProposalF override apply(IEObjectDescription description) { completionProposal(description.name.getSegment(1)) .appendInfoText(description.name.firstSegment) - .appendInfoText(DOMAIN_METACLASS_SEPARATOR) + .appendInfoText(METAMODEL_METACLASS_SEPARATOR) .appendText(description.name.getSegment(1)) .withImageOf(description.EObjectOrProxy) .usePrefixMatcher(ignoreCase) diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/validation/CommonalitiesLanguageEclipseValidator.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/validation/CommonalitiesLanguageEclipseValidator.xtend index d5047e2d60..bacf172281 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/validation/CommonalitiesLanguageEclipseValidator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities.ui/src/tools/vitruv/dsls/commonalities/ui/validation/CommonalitiesLanguageEclipseValidator.xtend @@ -4,10 +4,9 @@ import tools.vitruv.dsls.commonalities.validation.CommonalitiesLanguageValidator import org.eclipse.xtext.validation.Check import tools.vitruv.dsls.commonalities.language.CommonalityFile import static tools.vitruv.dsls.commonalities.language.LanguagePackage.Literals.* -import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.* import tools.vitruv.dsls.common.ui.validation.ProjectValidation -import tools.vitruv.dsls.commonalities.language.Participation import tools.vitruv.extensions.dslruntime.commonalities.marker.RuntimeProjectMarker +import tools.vitruv.dsls.common.elements.MetamodelImport /** * Validations that are only applicable when running in Eclipse. @@ -19,12 +18,13 @@ class CommonalitiesLanguageEclipseValidator extends CommonalitiesLanguageValidat ProjectValidation.checkRuntimeProjectIsOnClasspath(this, services.typeReferences, RuntimeProjectMarker, commonalityFile, COMMONALITY_FILE__CONCEPT) } - + @Check(NORMAL) - def checkParticipationDomainOnClasspath(Participation participation) { - if (participation.domainName !== null && !participation.isCommonalityParticipation) { - ProjectValidation.checkDomainProjectIsOnClasspath(this, services.typeReferences, participation.domainName, - participation) + def checkMetamodelOnClasspath(MetamodelImport metamodelImport) { + if (metamodelImport.package !== null) { + ProjectValidation.checkMetamodelProjectIsOnClasspath(this, services.typeReferences, metamodelImport.package, + metamodelImport) } } + } diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/META-INF/MANIFEST.MF b/bundles/dsls/tools.vitruv.dsls.commonalities/META-INF/MANIFEST.MF index 24fceb31e7..25394ccf0f 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/META-INF/MANIFEST.MF +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/META-INF/MANIFEST.MF @@ -28,7 +28,6 @@ Export-Package: tools.vitruv.dsls.commonalities, tools.vitruv.dsls.commonalities.conversion, tools.vitruv.dsls.commonalities.export;x-internal:=true, tools.vitruv.dsls.commonalities.generator, - tools.vitruv.dsls.commonalities.generator.domain, tools.vitruv.dsls.commonalities.generator.helper, tools.vitruv.dsls.commonalities.generator.intermediatemodel, tools.vitruv.dsls.commonalities.generator.changepropagationspecification, diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.ecore b/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.ecore index 354c941b09..d8db469d7c 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.ecore +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.ecore @@ -70,11 +70,11 @@ - - - + + + - + - diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.genmodel b/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.genmodel index 8e8f1a60a9..592afbb172 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.genmodel +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/model/LanguageElements.genmodel @@ -3,12 +3,11 @@ xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/tools.vitruv.dsls.commonalities/src-gen" modelName="LanguageElements" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container" importerID="org.eclipse.emf.importer.ecore" containmentProxies="true" complianceLevel="8.0" copyrightFields="false" language="" - usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore" - classNamePattern="" operationReflection="true" importOrganizing="true"> + usedGenPackages="../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore" classNamePattern="" + operationReflection="true" importOrganizing="true"> LanguageElements.ecore - @@ -57,13 +56,13 @@ - - - - + + + + - - + + diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/CommonalitiesLanguage.xtext b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/CommonalitiesLanguage.xtext index c4f47b638b..cfd8603d1e 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/CommonalitiesLanguage.xtext +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/CommonalitiesLanguage.xtext @@ -4,11 +4,13 @@ grammar tools.vitruv.dsls.commonalities.CommonalitiesLanguage generate language "http://vitruv.tools/dsls/commonalities/language" import "http://www.eclipse.org/emf/2002/Ecore" as ecore +import "http://vitruv.tools/dsls/common/elements" as common import "http://vitruv.tools/dsls/commonalities/elements" import "http://www.eclipse.org/xtext/common/JavaVMTypes" as jvmTypes CommonalityFile: (operatorImports+=OperatorImport)* + (metamodelImports+=MetamodelImport)* concept=Concept commonality=Commonality ; @@ -17,6 +19,10 @@ OperatorImport: 'import' (importedNamespace=QualifiedOperatorName | importedNamespace=QualifiedOperatorWildCard) ; +MetamodelImport returns common::MetamodelImport: + 'import' package=[ecore::EPackage|STRING] 'as' name=ValidID (useQualifiedNames?='using' 'qualified' 'names')? +; + Domain: Concept ; diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/conversion/QualifiedClassValueConverter.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/conversion/QualifiedClassValueConverter.xtend index 67c11f0349..1503a17082 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/conversion/QualifiedClassValueConverter.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/conversion/QualifiedClassValueConverter.xtend @@ -14,7 +14,7 @@ import org.eclipse.xtext.conversion.IValueConverter @Singleton class QualifiedClassValueConverter implements IValueConverter { - static val DELIMITER = QualifiedNameHelper.DOMAIN_METACLASS_SEPARATOR + static val DELIMITER = QualifiedNameHelper.METAMODEL_METACLASS_SEPARATOR static val DOMAIN_NAME_RULE = 'DomainName' static val UNQUALIFIED_CLASS_RULE = 'UnqualifiedClass' diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/CommonalitiesLanguageGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/CommonalitiesLanguageGenerator.xtend index c6b715d117..345b53b643 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/CommonalitiesLanguageGenerator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/CommonalitiesLanguageGenerator.xtend @@ -7,7 +7,6 @@ import org.eclipse.emf.ecore.resource.Resource import org.eclipse.xtext.generator.IFileSystemAccess2 import org.eclipse.xtext.generator.IGenerator2 import org.eclipse.xtext.generator.IGeneratorContext -import tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainGenerator import tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateMetamodelCodeGenerator import tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateMetamodelGenerator import tools.vitruv.dsls.commonalities.generator.reactions.ReactionsGenerator @@ -22,7 +21,6 @@ class CommonalitiesLanguageGenerator implements IGenerator2 { @Inject Provider intermediateMetamodelGenerator @Inject Provider intermediateMetamodelCodeGenerator @Inject Provider reactionsGenerator - @Inject Provider conceptDomainGenerator @Inject Provider changePropagationSpecificationGenerator val generationScopes = new HashMap() @@ -31,7 +29,6 @@ class CommonalitiesLanguageGenerator implements IGenerator2 { #[ intermediateMetamodelGenerator.get, intermediateMetamodelCodeGenerator.get, - conceptDomainGenerator.get, reactionsGenerator.get, changePropagationSpecificationGenerator.get ] diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/GenerationContext.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/GenerationContext.xtend index c8cd56d5a4..9744efa218 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/GenerationContext.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/GenerationContext.xtend @@ -10,7 +10,6 @@ import org.eclipse.emf.ecore.EStructuralFeature import org.eclipse.emf.ecore.resource.ResourceSet import org.eclipse.xtend.lib.annotations.Accessors import org.eclipse.xtext.generator.IFileSystemAccess2 -import tools.vitruv.dsls.commonalities.generator.domain.ConceptDomain import tools.vitruv.dsls.commonalities.generator.util.guice.GenerationScoped import tools.vitruv.dsls.commonalities.generator.util.guice.InjectingFactoryBase import tools.vitruv.dsls.commonalities.language.Commonality @@ -27,7 +26,6 @@ import tools.vitruv.dsls.commonalities.language.elements.Domain import tools.vitruv.dsls.commonalities.language.elements.EClassAdapter import tools.vitruv.dsls.commonalities.language.elements.EFeatureAdapter import tools.vitruv.dsls.commonalities.language.elements.ResourceMetaclass -import tools.vitruv.dsls.commonalities.language.elements.VitruvDomainAdapter import tools.vitruv.extensions.dslruntime.commonalities.resources.ResourcesPackage import static com.google.common.base.Preconditions.* @@ -36,6 +34,7 @@ import static extension tools.vitruv.dsls.commonalities.generator.intermediatemo import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.* import javax.inject.Inject import java.util.Set +import tools.vitruv.dsls.commonalities.language.elements.MetamodelAdapter @GenerationScoped class GenerationContext { @@ -60,7 +59,7 @@ class GenerationContext { @Inject CommonalitiesGenerationSettings settings // TODO Cache for complete ResourceSet (but: how to known when to cleanup)? - val Map intermediateDomains = new HashMap + val Map metamodelRootPackageForConcepts = new HashMap private new(IFileSystemAccess2 fsa, CommonalityFile commonalityFile) { checkNotNull(fsa, "fsa is null") @@ -109,15 +108,15 @@ class GenerationContext { } def reportGeneratedIntermediateMetamodel(String conceptName, EPackage intermediateMetamodelPackage) { - intermediateDomains.put(conceptName, new ConceptDomain(conceptName, intermediateMetamodelPackage)) + metamodelRootPackageForConcepts.put(conceptName, intermediateMetamodelPackage) } def getIntermediateMetamodelPackage(Concept concept) { - concept.name.intermediateMetamodelPackage + concept.metamodelRootPackage } def getIntermediateMetamodelPackage(String conceptName) { - conceptName.vitruvDomain.metamodelRootPackage + conceptName.metamodelRootPackage } def getIntermediateMetamodelUri(String conceptName) { @@ -197,27 +196,27 @@ class GenerationContext { mapping.participationAttribute?.correspondingEFeature } - def getVitruvDomain(Domain domain) { - domain.findVitruvDomain + def getMetamodelRootPackage(Domain domain) { + domain.findMetamodelRootPackage } - private def dispatch findVitruvDomain(VitruvDomainAdapter adapter) { + private def dispatch findMetamodelRootPackage(MetamodelAdapter adapter) { adapter.wrapped } - private def dispatch findVitruvDomain(Concept concept) { - concept.vitruvDomain + private def dispatch findMetamodelRootPackage(Concept concept) { + concept.metamodelRootPackage } - def getVitruvDomain(Concept concept) { - concept.name.vitruvDomain + def getMetamodelRootPackage(Concept concept) { + concept.name.metamodelRootPackage } - def getVitruvDomain(String cName) { - intermediateDomains.computeIfAbsent(cName) [ conceptName | - val ePackage = resourceSet.getResource(conceptName.intermediateMetamodelUri, false).contents.head as EPackage + def getMetamodelRootPackage(String conceptName) { + metamodelRootPackageForConcepts.computeIfAbsent(conceptName) [ cName | + val ePackage = resourceSet.getResource(cName.intermediateMetamodelUri, false).contents.head as EPackage checkState(ePackage !== null, '''No ePackage was registered for the concept ‹«conceptName»›!''') - new ConceptDomain(conceptName, ePackage) + ePackage ] } } diff --git a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/changepropagationspecification/ChangePropagationSpecificationGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/changepropagationspecification/ChangePropagationSpecificationGenerator.xtend index 31dc389ded..759325f9a0 100644 --- a/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/changepropagationspecification/ChangePropagationSpecificationGenerator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.commonalities/src/tools/vitruv/dsls/commonalities/generator/changepropagationspecification/ChangePropagationSpecificationGenerator.xtend @@ -126,8 +126,8 @@ class ChangePropagationSpecificationGenerator implements SubGenerator { private def Set> getMetamodelPairsForChangePropagation() { commonalityFiles.flatMap [ file | file.commonality.participations.flatMap [ - val firstPackage = domain.vitruvDomain.metamodelRootPackage - val secondPackage = file.concept.vitruvDomain.metamodelRootPackage + val firstPackage = domain.metamodelRootPackage + val secondPackage = file.concept.metamodelRootPackage #[firstPackage -> secondPackage, secondPackage -> firstPackage] ] ].toSet @@ -136,11 +136,11 @@ class ChangePropagationSpecificationGenerator implements SubGenerator { private def Set 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 @@ - - + + - - + + diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguage.xtext b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguage.xtext index 1c9313d5a1..20951bdcf8 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguage.xtext +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguage.xtext @@ -17,8 +17,8 @@ MetamodelImport returns common::MetamodelImport: ReactionsSegment returns toplevelelements::ReactionsSegment: 'reactions:' name=ValidID - 'in' 'reaction' 'to' 'changes' 'in' fromDomain=DomainReference - 'execute' 'actions' 'in' toDomain=DomainReference + 'in' 'reaction' 'to' 'changes' 'in' fromMetamodels+=[common::MetamodelImport] ('and' fromMetamodels+=[common::MetamodelImport])* + 'execute' 'actions' 'in' toMetamodels+=[common::MetamodelImport] ('and' toMetamodels+=[common::MetamodelImport])* (reactionsImports+=ReactionsImport)* (reactions+=Reaction | routines+=Routine)*; @@ -274,5 +274,3 @@ MetaclassEAttributeReference returns common::MetaclassEAttributeReference: MetaclassEReferenceReference returns common::MetaclassEReferenceReference: MetaclassReference '[' feature=[ecore::EReference|ValidID] ']'; -DomainReference returns common::DomainReference: - domain=ValidID; diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguageStandaloneSetup.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguageStandaloneSetup.xtend index 7f933b7646..2d8530f43a 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguageStandaloneSetup.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/ReactionsLanguageStandaloneSetup.xtend @@ -3,7 +3,7 @@ */ package tools.vitruv.dsls.reactions -import static tools.vitruv.dsls.common.elements.CommonLanguageElementsInitialization.initializeVitruvDomainsRepository +import org.eclipse.emf.ecore.plugin.EcorePlugin /** * Initialization support for running Xtext languages without Equinox extension registry. @@ -11,7 +11,8 @@ import static tools.vitruv.dsls.common.elements.CommonLanguageElementsInitializa class ReactionsLanguageStandaloneSetup extends ReactionsLanguageStandaloneSetupGenerated { def static void doSetup() { - initializeVitruvDomainsRepository() + // Makes ECore register our custom implementations of EPackages + EcorePlugin.ExtensionProcessor.process(null) new ReactionsLanguageStandaloneSetup().createInjectorAndDoEMFRegistration() } } diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/builder/FluentReactionsSegmentBuilder.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/builder/FluentReactionsSegmentBuilder.xtend index db6a54412a..cdc72bda3a 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/builder/FluentReactionsSegmentBuilder.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/builder/FluentReactionsSegmentBuilder.xtend @@ -4,10 +4,10 @@ import org.eclipse.xtend.lib.annotations.Accessors import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsImport import tools.vitruv.dsls.reactions.language.toplevelelements.TopLevelElementsFactory import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsSegment -import tools.vitruv.framework.domains.VitruvDomain import static com.google.common.base.Preconditions.* -import tools.vitruv.dsls.common.elements.ElementsFactory +import java.util.Set +import org.eclipse.emf.ecore.EPackage @Accessors(PACKAGE_GETTER) class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder { @@ -37,12 +37,14 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder { this.builder = builder } - def inReactionToChangesIn(VitruvDomain domain) { - inReactionToChangesIn(domain.name) + def inReactionToChangesIn(EPackage sourceMetamodelRootPackage) { + inReactionToChangesIn(#{sourceMetamodelRootPackage}) } - def inReactionToChangesIn(String domainName) { - segment.fromDomain = domainName.domainReference + def inReactionToChangesIn(Set sourceMetamodelRootPackages) { + beforeAttached [ + segment.fromMetamodels += sourceMetamodelRootPackages.map[metamodelImport] + ] new ReactionsSegmentTargetBuilder(builder) } } @@ -54,23 +56,19 @@ class FluentReactionsSegmentBuilder extends FluentReactionElementBuilder { this.builder = builder } - def executeActionsIn(VitruvDomain domain) { - executeActionsIn(domain.name) + def executeActionsIn(EPackage targetMetamodelRootPackage) { + executeActionsIn(#{targetMetamodelRootPackage}) } - def executeActionsIn(String domainName) { - segment.toDomain = domainName.domainReference + def executeActionsIn(Set targetMetamodelRootPackages) { + beforeAttached [ + segment.toMetamodels += targetMetamodelRootPackages.map[metamodelImport] + ] readyToBeAttached = true builder } } - def private static domainReference(String domainName) { - ElementsFactory.eINSTANCE.createDomainReference => [ - domain = domainName - ] - } - def importSegment(FluentReactionsSegmentBuilder reactionsSegmentBuilder) { return new ReactionsSegmentImportBuilder(this, reactionsSegmentBuilder); } diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ChangePropagationSpecificationClassGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ChangePropagationSpecificationClassGenerator.xtend index 4031b40ff6..6c49a5dbd2 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ChangePropagationSpecificationClassGenerator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ChangePropagationSpecificationClassGenerator.xtend @@ -10,8 +10,9 @@ import tools.vitruv.extensions.dslsruntime.reactions.AbstractReactionsChangeProp import tools.vitruv.framework.propagation.ChangePropagationSpecification import static extension tools.vitruv.dsls.reactions.codegen.helper.ClassNamesGenerators.* -import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsLanguageHelper.* import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsElementsCompletionChecker.isReferenceable +import java.util.Set +import tools.vitruv.framework.change.MetamodelDescriptor class ChangePropagationSpecificationClassGenerator extends ClassGenerator { final ReactionsSegment reactionsSegment; @@ -38,8 +39,8 @@ class ChangePropagationSpecificationClassGenerator extends ClassGenerator { superTypes += typeRef(ChangePropagationSpecification); members += reactionsSegment.toConstructor() [ body = ''' - super(new «reactionsSegment.fromDomain.domainProviderForReference.canonicalNameForReference»().getDomain(), - new «reactionsSegment.toDomain.domainProviderForReference.canonicalNameForReference»().getDomain());''' + super(«MetamodelDescriptor».with(«Set».of(«FOR namespaceUri : reactionsSegment.fromMetamodels.map[package.nsURI] SEPARATOR ','»"«namespaceUri»"«ENDFOR»)), + «MetamodelDescriptor».with(«Set».of(«FOR namespaceUri : reactionsSegment.toMetamodels.map[package.nsURI] SEPARATOR ','»"«namespaceUri»"«ENDFOR»)));''' ] // register executor as change processor: @@ -47,8 +48,7 @@ class ChangePropagationSpecificationClassGenerator extends ClassGenerator { visibility = JvmVisibility.PROTECTED; val metamodelPackageClassQualifiedNames = new ArrayList metamodelPackageClassQualifiedNames += - #[reactionsSegment.fromDomain.domainForReference.metamodelRootPackage.class, - reactionsSegment.toDomain.domainForReference.metamodelRootPackage.class].filter [ + (reactionsSegment.fromMetamodels + reactionsSegment.toMetamodels).map[package.class].filter [ it !== EPackageImpl ].map[name] body = ''' diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ExecutorClassGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ExecutorClassGenerator.xtend index 829b84581d..1f66df6e87 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ExecutorClassGenerator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/classgenerators/ExecutorClassGenerator.xtend @@ -9,10 +9,11 @@ import tools.vitruv.extensions.dslsruntime.reactions.RoutinesFacadesProvider import tools.vitruv.extensions.dslsruntime.reactions.structure.ReactionsImportPath import static extension tools.vitruv.dsls.reactions.codegen.helper.ClassNamesGenerators.* import tools.vitruv.dsls.reactions.codegen.typesbuilder.TypesBuilderExtensionProvider -import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsLanguageHelper.*; import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsImportsHelper.*; import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsElementsCompletionChecker.isReferenceable import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsElementsCompletionChecker.isComplete +import java.util.Set +import tools.vitruv.framework.change.MetamodelDescriptor class ExecutorClassGenerator extends ClassGenerator { final ReactionsSegment reactionsSegment; @@ -37,8 +38,8 @@ class ExecutorClassGenerator extends ClassGenerator { superTypes += typeRef(AbstractReactionsExecutor); members += reactionsSegment.toConstructor() [ body = ''' - super(new «reactionsSegment.fromDomain.domainProviderForReference.canonicalNameForReference»().getDomain(), - new «reactionsSegment.toDomain.domainProviderForReference.canonicalNameForReference»().getDomain());''' + super(«MetamodelDescriptor».with(«Set».of(«FOR namespaceUri : reactionsSegment.fromMetamodels.map[package.nsURI] SEPARATOR ','»"«namespaceUri»"«ENDFOR»)), + «MetamodelDescriptor».with(«Set».of(«FOR namespaceUri : reactionsSegment.toMetamodels.map[package.nsURI] SEPARATOR ','»"«namespaceUri»"«ENDFOR»)));''' ] // create routines facades provider: @@ -64,4 +65,5 @@ class ExecutorClassGenerator extends ClassGenerator { ] ] } + } \ No newline at end of file diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsElementsCompletionChecker.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsElementsCompletionChecker.xtend index 135c3e4073..251f8d389b 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsElementsCompletionChecker.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsElementsCompletionChecker.xtend @@ -6,7 +6,6 @@ import tools.vitruv.dsls.reactions.language.toplevelelements.RoutineOverrideImpo import static extension tools.vitruv.dsls.reactions.util.ReactionsLanguageUtil.* import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsSegment import edu.kit.ipd.sdq.activextendannotations.Utility -import tools.vitruv.dsls.common.elements.DomainReference import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsImport @Utility @@ -15,13 +14,8 @@ class ReactionsElementsCompletionChecker { def static boolean isReferenceable(ReactionsSegment reactionsSegment) { return reactionsSegment !== null && !reactionsSegment.name.nullOrEmpty - && reactionsSegment.fromDomain.isReferenceable - && reactionsSegment.toDomain.isReferenceable - } - - def static boolean isReferenceable(DomainReference domainReference) { - return domainReference !== null - && domainReference.domain !== null + && !reactionsSegment.fromMetamodels.isEmpty + && !reactionsSegment.toMetamodels.isEmpty } def static boolean isReferenceable(ReactionsImport reactionsImport) { diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsLanguageHelper.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsLanguageHelper.xtend index eeb9ea8d28..3a13b9a99c 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsLanguageHelper.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/codegen/helper/ReactionsLanguageHelper.xtend @@ -4,15 +4,9 @@ import org.eclipse.xtext.nodemodel.util.NodeModelUtils import org.eclipse.xtext.xbase.XExpression import org.eclipse.xtext.xbase.XBlockExpression import tools.vitruv.dsls.common.elements.MetaclassReference -import tools.vitruv.dsls.common.elements.DomainReference -import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsSegment -import edu.kit.ipd.sdq.commons.util.java.Pair -import tools.vitruv.framework.domains.VitruvDomainProvider -import tools.vitruv.framework.domains.VitruvDomain import tools.vitruv.dsls.reactions.language.toplevelelements.ReactionsFile import org.eclipse.emf.ecore.resource.Resource import static com.google.common.base.Preconditions.* -import tools.vitruv.framework.domains.VitruvDomainProviderRegistry import tools.vitruv.dsls.reactions.api.generator.ReferenceClassNameAdapter import org.eclipse.emf.ecore.EObject import org.eclipse.emf.ecore.EClassifier @@ -46,38 +40,6 @@ class ReactionsLanguageHelper { metaclassReference.metaclass?.javaClassName; } - static def VitruvDomainProvider getProviderForDomain(VitruvDomain domain) { - return if (VitruvDomainProviderRegistry.hasDomainProvider(domain.name)) { - VitruvDomainProviderRegistry.getDomainProvider(domain.name); - } else { - null; - } - } - - static def VitruvDomain getDomainForReference(DomainReference domainReference) { - return getDomainProviderForReference(domainReference).domain; - } - - static def VitruvDomainProvider getDomainProviderForReference(DomainReference domainReference) { - val referencedDomainProvider = if (VitruvDomainProviderRegistry.hasDomainProvider(domainReference.domain)) { - VitruvDomainProviderRegistry.getDomainProvider(domainReference.domain) - } - if (referencedDomainProvider === null) { - throw new IllegalStateException("Given domain reference references no existing domain: " + domainReference.domain); - } - return referencedDomainProvider; - } - - static def Pair getSourceTargetPair(ReactionsSegment reactionsSegment) { - val sourceDomain = reactionsSegment.fromDomain.domainForReference; - val targetDomain = reactionsSegment.toDomain.domainForReference; - if (sourceDomain !== null && targetDomain !== null) { - return new Pair(sourceDomain, targetDomain); - } else { - return null; - } - } - def static ReactionsFile getReactionsFile(Resource resource) { val firstContentElement = resource?.contents?.head checkArgument(firstContentElement instanceof ReactionsFile, diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/generator/InternalReactionsGenerator.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/generator/InternalReactionsGenerator.xtend index e3671479b9..6ab4fea818 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/generator/InternalReactionsGenerator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/generator/InternalReactionsGenerator.xtend @@ -15,8 +15,6 @@ import tools.vitruv.dsls.reactions.api.generator.IReactionsGenerator import static com.google.common.base.Preconditions.* import java.util.ArrayList import org.eclipse.xtext.resource.XtextResourceSet -import tools.vitruv.dsls.common.elements.DomainReference -import tools.vitruv.dsls.common.elements.ElementsFactory import tools.vitruv.dsls.reactions.builder.FluentReactionsFileBuilder import org.eclipse.xtext.resource.IResourceFactory import org.eclipse.emf.ecore.resource.ResourceSet @@ -66,8 +64,8 @@ class InternalReactionsGenerator implements IReactionsGenerator { val reactionsFile = res.reactionsFile var ReactionsSegment foundSegment = null; for (segment : reactionsFile.reactionsSegments) { - if (segment.fromDomain.domain == reactionsSegment.fromDomain.domain && - segment.toDomain.domain == reactionsSegment.toDomain.domain) { + if (segment.fromMetamodels.map[package].equals(reactionsSegment.fromMetamodels.map[package]) && + segment.toMetamodels.map[package].equals(reactionsSegment.toMetamodels.map[package])) { foundSegment = segment; } } @@ -85,20 +83,14 @@ class InternalReactionsGenerator implements IReactionsGenerator { def private ReactionsSegment addReactionsSegment(ReactionsFile fileToAddTo, ReactionsSegment originalSegment, String segmentName) { val newSegment = TopLevelElementsFactory.eINSTANCE.createReactionsSegment() => [ - fromDomain = originalSegment.fromDomain.copy() - toDomain = originalSegment.toDomain.copy() + fromMetamodels += originalSegment.fromMetamodels + toMetamodels += originalSegment.toMetamodels name = segmentName; ] fileToAddTo.reactionsSegments += newSegment; return newSegment; } - def private copy(DomainReference referenceToCopy) { - ElementsFactory.eINSTANCE.createDomainReference => [ - domain = referenceToCopy.domain - ] - } - override addReaction(String sourceFileName, Reaction... reactions) { addReaction(sourceFileName, reactions.toList) } diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/util/ReactionsLanguageUtil.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/util/ReactionsLanguageUtil.xtend index b9a3a08174..19eb5e5270 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/util/ReactionsLanguageUtil.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/util/ReactionsLanguageUtil.xtend @@ -24,9 +24,9 @@ class ReactionsLanguageUtil { * @return the formatted representation of the metamodel pair */ static def String getFormattedMetamodelPair(ReactionsSegment reactionsSegment) { - val sourceDomainName = reactionsSegment.fromDomain?.domain; - val targetDomainName = reactionsSegment.toDomain?.domain; - return "(" + sourceDomainName + ", " + targetDomainName + ")"; + val sourceMetamodelsNames = reactionsSegment.fromMetamodels.map[name]; + val targetMetamodelsNames = reactionsSegment.toMetamodels.map[name]; + return "(" + sourceMetamodelsNames + ", " + targetMetamodelsNames + ")"; } // reactions segment name: diff --git a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/validation/ReactionsLanguageValidator.xtend b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/validation/ReactionsLanguageValidator.xtend index 22e6919721..f3efe53a84 100644 --- a/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/validation/ReactionsLanguageValidator.xtend +++ b/bundles/dsls/tools.vitruv.dsls.reactions/src/tools/vitruv/dsls/reactions/validation/ReactionsLanguageValidator.xtend @@ -26,10 +26,6 @@ import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsLang import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsElementsCompletionChecker.isComplete import static extension tools.vitruv.dsls.reactions.codegen.helper.ReactionsImportsHelper.* import static extension tools.vitruv.dsls.reactions.util.ReactionsLanguageUtil.* -import tools.vitruv.dsls.common.elements.DomainReference -import tools.vitruv.framework.domains.VitruvDomainProviderRegistry -import tools.vitruv.dsls.common.elements.ElementsPackage -import static extension tools.vitruv.dsls.common.elements.CommonLanguageElementsValidation.isValid import tools.vitruv.dsls.reactions.language.LanguagePackage /** @@ -453,16 +449,4 @@ class ReactionsLanguageValidator extends AbstractReactionsLanguageValidator { } } - @Check - def checkDomainReference(DomainReference domainReference) { - if (!domainReference.isValid) { - val domainNames = VitruvDomainProviderRegistry.allDomainProviders.map[domain.name] - error( - '''No domain with the specified name found. Available domains are : «FOR domainName : domainNames SEPARATOR ", "»«domainName»«ENDFOR»''', - domainReference, - ElementsPackage.Literals.DOMAIN_REFERENCE__DOMAIN - ) - } - } - } diff --git a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/META-INF/MANIFEST.MF b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/META-INF/MANIFEST.MF index 7591529112..54a956668e 100644 --- a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/META-INF/MANIFEST.MF +++ b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/META-INF/MANIFEST.MF @@ -9,8 +9,7 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11 Bundle-Vendor: %providerName Bundle-Localization: plugin Bundle-ActivationPolicy: lazy -Require-Bundle: tools.vitruv.framework.domains;visibility:=reexport, - edu.kit.ipd.sdq.activextendannotations, +Require-Bundle: edu.kit.ipd.sdq.activextendannotations, tools.vitruv.extensions.dslsruntime.reactions;visibility:=reexport, org.eclipse.emf.ecore.xmi, tools.vitruv.extensions.dslsruntime.commonalities.operators;visibility:=reexport diff --git a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/src/tools/vitruv/extensions/dslruntime/commonalities/IntermediateVitruvDomain.xtend b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/src/tools/vitruv/extensions/dslruntime/commonalities/IntermediateVitruvDomain.xtend deleted file mode 100644 index 820e0e507c..0000000000 --- a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.commonalities/src/tools/vitruv/extensions/dslruntime/commonalities/IntermediateVitruvDomain.xtend +++ /dev/null @@ -1,45 +0,0 @@ -package tools.vitruv.extensions.dslruntime.commonalities - -import java.util.Set -import org.eclipse.emf.ecore.EObject -import org.eclipse.emf.ecore.EPackage -import tools.vitruv.extensions.dslruntime.commonalities.resources.IntermediateResourceBridge -import tools.vitruv.framework.domains.AbstractVitruvDomain - -abstract class IntermediateVitruvDomain extends AbstractVitruvDomain { - - new(String name, EPackage metamodelRootPackage, Set furtherRootPackages, String... fileExtensions) { - super(name, metamodelRootPackage, furtherRootPackages, fileExtensions) - } - - new(String name, EPackage metamodelRootPackage, String... fileExtensions) { - super(name, metamodelRootPackage, fileExtensions) - } - - override shouldTransitivelyPropagateChanges() { - true - } - - override isUserVisible() { - false - } - - override boolean isInstanceOfDomainMetamodel(EObject eObject) { - // IntermediateResourceBridge is shared by the various intermediate - // domains. During the creation of a new IntermediateResourceBridge - // instance we assign it the namespace URI of the intermediate domain - // it belongs to and check for that here. - // Alternatives could be to handle resources differently, generate an - // IntermediateResourceBridge class per concept metamodel (which would - // need to use or delegate to the implementation found in - // IntermediateResourceBridgeI), or add a generally applicable - // mechanism to the Vitruvius framework in order to support metamodels - // that are shared by various domains but still be able to determine - // the domain a certain shared metaclass instance belongs to. - if (eObject instanceof IntermediateResourceBridge) { - return nsUris.contains(eObject.intermediateNS) - } else { - return super.isInstanceOfDomainMetamodel(eObject) - } - } -} diff --git a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/META-INF/MANIFEST.MF b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/META-INF/MANIFEST.MF index 3ce4eaa7c4..e4dd346b3d 100644 --- a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/META-INF/MANIFEST.MF +++ b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/META-INF/MANIFEST.MF @@ -16,7 +16,6 @@ Require-Bundle: org.apache.log4j;visibility:=reexport, tools.vitruv.framework.correspondence;visibility:=reexport, tools.vitruv.framework.change;visibility:=reexport, tools.vitruv.framework.propagation;visibility:=reexport, - tools.vitruv.framework.domains, tools.vitruv.framework.util;visibility:=reexport, tools.vitruv.framework.userinteraction;visibility:=reexport Bundle-ActivationPolicy: lazy diff --git a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsChangePropagationSpecification.xtend b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsChangePropagationSpecification.xtend index b63b067888..3638a7c30e 100644 --- a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsChangePropagationSpecification.xtend +++ b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsChangePropagationSpecification.xtend @@ -1,6 +1,5 @@ package tools.vitruv.extensions.dslsruntime.reactions -import tools.vitruv.framework.domains.VitruvDomain import tools.vitruv.framework.propagation.impl.CompositeChangePropagationSpecification import tools.vitruv.framework.change.MetamodelDescriptor @@ -9,8 +8,8 @@ import tools.vitruv.framework.change.MetamodelDescriptor * To add further change processors extend the implementing class and override the setup method. */ abstract class AbstractReactionsChangePropagationSpecification extends CompositeChangePropagationSpecification { - new(VitruvDomain sourceDomain, VitruvDomain targetDomain) { - super(MetamodelDescriptor.of(sourceDomain.metamodelRootPackage), MetamodelDescriptor.of(targetDomain.metamodelRootPackage)); + new(MetamodelDescriptor sourceMetamodelDescriptor, MetamodelDescriptor targetMetamodelDescriptor) { + super(sourceMetamodelDescriptor, targetMetamodelDescriptor); this.setup(); } diff --git a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsExecutor.xtend b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsExecutor.xtend index 277985cafc..f9a26e31a3 100644 --- a/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsExecutor.xtend +++ b/bundles/extensions/dslsruntime/tools.vitruv.extensions.dslsruntime.reactions/src/tools/vitruv/extensions/dslsruntime/reactions/AbstractReactionsExecutor.xtend @@ -5,7 +5,6 @@ import tools.vitruv.extensions.dslsruntime.reactions.IReactionRealization import tools.vitruv.framework.userinteraction.UserInteractor import tools.vitruv.framework.change.echange.EChange import tools.vitruv.framework.correspondence.CorrespondenceModel -import tools.vitruv.framework.domains.VitruvDomain import tools.vitruv.framework.propagation.ResourceAccess import java.util.List import tools.vitruv.framework.propagation.impl.AbstractChangePropagationSpecification @@ -17,8 +16,8 @@ abstract class AbstractReactionsExecutor extends AbstractChangePropagationSpecif val RoutinesFacadesProvider routinesFacadesProvider; List reactions; - new(VitruvDomain sourceDomain, VitruvDomain targetDomain) { - super(MetamodelDescriptor.of(sourceDomain.metamodelRootPackage), MetamodelDescriptor.of(targetDomain.metamodelRootPackage)); + new(MetamodelDescriptor sourceMetamodelDescriptor, MetamodelDescriptor targetMetamodelDescriptor) { + super(sourceMetamodelDescriptor, targetMetamodelDescriptor); this.reactions = newArrayList; this.routinesFacadesProvider = this.createRoutinesFacadesProvider(); this.setup(); diff --git a/features/pom.xml b/features/pom.xml index 5a9ebb2f94..34d87a8769 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -13,7 +13,8 @@ Feature Modules - tools.vitruv.framework.feature + tools.vitruv.framework.change.feature + tools.vitruv.framework.vsum.feature tools.vitruv.testutils.feature tools.vitruv.extensions.changevisualization.feature tools.vitruv.extensions.dslsruntime.feature diff --git a/features/tools.vitruv.framework.change.feature/.project b/features/tools.vitruv.framework.change.feature/.project new file mode 100644 index 0000000000..8ac4de9177 --- /dev/null +++ b/features/tools.vitruv.framework.change.feature/.project @@ -0,0 +1,17 @@ + + + tools.vitruv.framework.change.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + + org.eclipse.pde.FeatureNature + + diff --git a/features/tools.vitruv.framework.feature/build.properties b/features/tools.vitruv.framework.change.feature/build.properties similarity index 100% rename from features/tools.vitruv.framework.feature/build.properties rename to features/tools.vitruv.framework.change.feature/build.properties diff --git a/features/tools.vitruv.framework.change.feature/feature.properties b/features/tools.vitruv.framework.change.feature/feature.properties new file mode 100644 index 0000000000..d6fef49406 --- /dev/null +++ b/features/tools.vitruv.framework.change.feature/feature.properties @@ -0,0 +1,7 @@ +featureName=Vitruv Change Propagation Framework +description=The Vitruv change propagation framework providing change propagation specification and execution capabilities +providerName=vitruv.tools +copyrightURL=http://vitruv.tools +copyright=\ +Copyright (c) 2014-2022 Vitruv Tools Team\n\ +Karlsruhe Institute of Technology (KIT), Software Design and Quality, Karlsruhe, Germany \ No newline at end of file diff --git a/features/tools.vitruv.framework.feature/feature.xml b/features/tools.vitruv.framework.change.feature/feature.xml similarity index 65% rename from features/tools.vitruv.framework.feature/feature.xml rename to features/tools.vitruv.framework.change.feature/feature.xml index 98b3adcefe..4d85c75d2c 100644 --- a/features/tools.vitruv.framework.feature/feature.xml +++ b/features/tools.vitruv.framework.change.feature/feature.xml @@ -1,6 +1,6 @@ - - - - - + + - - - - + + - + + + + - - - - - - - - - - - - - - - - diff --git a/features/tools.vitruv.framework.feature/feature.properties b/features/tools.vitruv.framework.feature/feature.properties deleted file mode 100644 index e22aa2cbe9..0000000000 --- a/features/tools.vitruv.framework.feature/feature.properties +++ /dev/null @@ -1,7 +0,0 @@ -featureName=Vitruv Core Framework -description=The Vitruv framework core providing the essential features of Vitruv -providerName=vitruv.tools -copyrightURL=http://vitruv.tools -copyright=\ -Copyright (c) 2014-2021 Vitruv Tools Team\n\ -Karlsruhe Institute of Technology (KIT), Software Design and Quality, Karlsruhe, Germany \ No newline at end of file diff --git a/features/tools.vitruv.framework.feature/.project b/features/tools.vitruv.framework.vsum.feature/.project similarity index 87% rename from features/tools.vitruv.framework.feature/.project rename to features/tools.vitruv.framework.vsum.feature/.project index 341d91bf51..f525ebcb33 100644 --- a/features/tools.vitruv.framework.feature/.project +++ b/features/tools.vitruv.framework.vsum.feature/.project @@ -1,6 +1,6 @@ - tools.vitruv.framework.feature + tools.vitruv.framework.vsum.feature diff --git a/features/tools.vitruv.framework.vsum.feature/build.properties b/features/tools.vitruv.framework.vsum.feature/build.properties new file mode 100644 index 0000000000..b3a611b5c9 --- /dev/null +++ b/features/tools.vitruv.framework.vsum.feature/build.properties @@ -0,0 +1,2 @@ +bin.includes = feature.xml,\ + feature.properties diff --git a/features/tools.vitruv.framework.vsum.feature/feature.properties b/features/tools.vitruv.framework.vsum.feature/feature.properties new file mode 100644 index 0000000000..3a3ab7af68 --- /dev/null +++ b/features/tools.vitruv.framework.vsum.feature/feature.properties @@ -0,0 +1,7 @@ +featureName=Vitruv V-SUM Framework +description=The Vitruv V-SUM framework providing the essential view-based features of Vitruv +providerName=vitruv.tools +copyrightURL=http://vitruv.tools +copyright=\ +Copyright (c) 2014-2022 Vitruv Tools Team\n\ +Karlsruhe Institute of Technology (KIT), Software Design and Quality, Karlsruhe, Germany \ No newline at end of file diff --git a/features/tools.vitruv.framework.vsum.feature/feature.xml b/features/tools.vitruv.framework.vsum.feature/feature.xml new file mode 100644 index 0000000000..edb0a80f78 --- /dev/null +++ b/features/tools.vitruv.framework.vsum.feature/feature.xml @@ -0,0 +1,93 @@ + + + + + %description + + + + %copyright + + + + %license + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/releng/tools.vitruv.updatesite/category.xml b/releng/tools.vitruv.updatesite/category.xml index c088191e00..e02f6bac6c 100644 --- a/releng/tools.vitruv.updatesite/category.xml +++ b/releng/tools.vitruv.updatesite/category.xml @@ -1,9 +1,21 @@ - + C + + + + + + + + + + + + - + @@ -18,12 +30,6 @@ - - - - - - @@ -31,10 +37,10 @@ - + - + @@ -48,14 +54,14 @@ - + - The Vitruv framework, including the essential core and optional extensions + The Vitruv core for change specification and propagation - + - DSLs for developing consistency-preserving Vitruv applications + The Vitruv framework, including the essential V-SUM and optional extensions diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AliasesExecutionTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AliasesExecutionTest.xtend index 70e71c86b6..f981829b6b 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AliasesExecutionTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AliasesExecutionTest.xtend @@ -14,6 +14,11 @@ class AliasesExecutionTest extends IdentifiedExecutionTest { override generate(@TestProject Path testProject) { generator.generate(testProject, 'IdentifiedWithAliases.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality IdentifiedWithAliases { @@ -53,6 +58,11 @@ class AliasesExecutionTest extends IdentifiedExecutionTest { } ''', 'SubWithAliases.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality SubWithAliases { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AttributeMappingOperatorExecutionTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AttributeMappingOperatorExecutionTest.xtend index d9d23bf8ef..2206a9fa85 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AttributeMappingOperatorExecutionTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/AttributeMappingOperatorExecutionTest.xtend @@ -35,6 +35,11 @@ class AttributeMappingOperatorExecutionTest extends VitruvApplicationTest { import tools.vitruv.dsls.commonalities.tests.operators.multiply import tools.vitruv.dsls.commonalities.tests.operators.digits + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept operators commonality WithAttributeMappingOperators { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ConditionsExecutionTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ConditionsExecutionTest.xtend index f51866fb6f..11a69e3d5f 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ConditionsExecutionTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ConditionsExecutionTest.xtend @@ -17,6 +17,11 @@ class ConditionsExecutionTest extends IdentifiedExecutionTest { override generate(@TestProject Path testProject) { generator.generate(testProject, 'IdentifiedWithConditions.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality IdentifiedWithConditions { @@ -68,6 +73,11 @@ class ConditionsExecutionTest extends IdentifiedExecutionTest { } ''', 'SubIdentified.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality SubIdentified { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/IdentifiedExecutionTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/IdentifiedExecutionTest.xtend index 90869f3aad..724ff8dfe5 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/IdentifiedExecutionTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/IdentifiedExecutionTest.xtend @@ -40,6 +40,11 @@ class IdentifiedExecutionTest extends VitruvApplicationTest { def void generate(@TestProject(variant = "commonalities") Path testProject) { generator.generate(testProject, 'Identified.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality Identified { @@ -78,6 +83,11 @@ class IdentifiedExecutionTest extends VitruvApplicationTest { } ''', 'SubIdentified.commonality' -> ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + import "http://tools.vitruv.testutils.metamodels.pcm_mockup" as PcmMockup + import "http://tools.vitruv.testutils.metamodels.uml_mockup" as UmlMockup + concept test commonality SubIdentified { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ReferenceMappingOperatorExecutionTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ReferenceMappingOperatorExecutionTest.xtend index 579b07b566..7f0f6b2547 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ReferenceMappingOperatorExecutionTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/execution/ReferenceMappingOperatorExecutionTest.xtend @@ -27,6 +27,9 @@ class ReferenceMappingOperatorExecutionTest extends VitruvApplicationTest { 'WithReferenceMappingOperators.commonality' -> ''' import tools.vitruv.dsls.commonalities.tests.operators.mock + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + import "http://tools.vitruv.testutils.metamodels.allElementTypes2" as AllElementTypes2 + concept operators commonality WithReferenceMappingOperators { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/FeatureMappingReferencingTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/FeatureMappingReferencingTest.xtend index fec128efc2..c9d5aed180 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/FeatureMappingReferencingTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/FeatureMappingReferencingTest.xtend @@ -15,13 +15,13 @@ import static tools.vitruv.testutils.matchers.ModelMatchers.equalsDeeply import static tools.vitruv.dsls.commonalities.tests.util.CommonalitiesLanguageCreators.commonalities import static extension tools.vitruv.dsls.commonalities.language.extensions.CommonalitiesLanguageModelExtensions.* import static tools.vitruv.testutils.metamodels.AllElementTypesCreators.aet -import static extension tools.vitruv.testutils.domains.DomainModelCreators.* import static allElementTypes.AllElementTypesPackage.Literals.* import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource import static tools.vitruv.testutils.matchers.ModelMatchers.ignoringFeatures import static tools.vitruv.dsls.commonalities.language.LanguagePackage.Literals.* import static tools.vitruv.testutils.matchers.ModelMatchers.usingEqualsForReferencesTo +import allElementTypes.AllElementTypesPackage @ExtendWith(InjectionExtension, ModelPrinterChange) @InjectWith(CommonalitiesLanguageInjectorProvider) @@ -38,6 +38,8 @@ class FeatureMappingReferencingTest { ) def void referenceParticipationInSimpleAttributeMapping(String participation, String reference) { val commonality = parseAndValidate(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -56,7 +58,7 @@ class FeatureMappingReferencingTest { attribute = commonalities.languageElements.EFeatureAttribute .fromMetaclass( commonalities.languageElements.EClassMetaclass - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) .forEClass(aet.Root.eClass) ).forEFeature(IDENTIFIED__ID) ] @@ -72,6 +74,9 @@ class FeatureMappingReferencingTest { ) def void referenceParticipationInSimpleReferenceMapping(String participation, String reference) { val commonality = parseAndValidate(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + + concept test commonality Test { @@ -90,7 +95,7 @@ class FeatureMappingReferencingTest { attribute = commonalities.languageElements.EFeatureAttribute .fromMetaclass( commonalities.languageElements.EClassMetaclass - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) .forEClass(aet.Root.eClass) ).forEFeature(ROOT__RECURSIVE_ROOT) ] @@ -107,7 +112,9 @@ class FeatureMappingReferencingTest { def void referenceParticipationInOperatorAttributeMapping(String participation, String reference) { val commonality = parseAndValidate(''' import tools.vitruv.dsls.commonalities.tests.operators.digits - + + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -127,7 +134,7 @@ class FeatureMappingReferencingTest { attribute = commonalities.languageElements.EFeatureAttribute .fromMetaclass( commonalities.languageElements.EClassMetaclass - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) .forEClass(aet.Root.eClass) ).forEFeature(ROOT__SINGLE_VALUED_EATTRIBUTE) ] @@ -147,6 +154,8 @@ class FeatureMappingReferencingTest { val commonality = parseAndValidate(''' import tools.vitruv.dsls.commonalities.tests.operators.mock + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -167,7 +176,7 @@ class FeatureMappingReferencingTest { attribute = commonalities.languageElements.EFeatureAttribute .fromMetaclass( commonalities.languageElements.EClassMetaclass - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) .forEClass(aet.NonRoot.eClass) ).forEFeature(IDENTIFIED__ID) ] @@ -190,6 +199,8 @@ class FeatureMappingReferencingTest { ) { inSameResourceSet [ val referenced = parseInSet(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept Referenced commonality Target { @@ -199,6 +210,8 @@ class FeatureMappingReferencingTest { val commonality = parseAndValidateInSet(''' import tools.vitruv.dsls.commonalities.tests.operators.mock + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -219,7 +232,7 @@ class FeatureMappingReferencingTest { attribute = commonalities.languageElements.EFeatureAttribute .fromMetaclass( commonalities.languageElements.EClassMetaclass - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) .forEClass(aet.NonRoot.eClass) ).forEFeature(IDENTIFIED__ID) ] diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ParticipationReferencingTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ParticipationReferencingTest.xtend index 3d18595b07..c5ade6bdc7 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ParticipationReferencingTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ParticipationReferencingTest.xtend @@ -12,11 +12,11 @@ import static tools.vitruv.testutils.matchers.ModelMatchers.equalsDeeply import static tools.vitruv.dsls.commonalities.tests.util.CommonalitiesLanguageCreators.commonalities import static tools.vitruv.testutils.metamodels.AllElementTypesCreators.aet import static org.hamcrest.MatcherAssert.assertThat -import static extension tools.vitruv.testutils.domains.DomainModelCreators.* import tools.vitruv.testutils.printing.ModelPrinterChange import tools.vitruv.testutils.printing.UseModelPrinter import tools.vitruv.dsls.commonalities.tests.util.CommonalitiesLanguageElementsPrinter import static tools.vitruv.testutils.matchers.ModelMatchers.usingEqualsForReferencesTo +import allElementTypes.AllElementTypesPackage @ExtendWith(InjectionExtension, ModelPrinterChange) @InjectWith(CommonalitiesLanguageInjectorProvider) @@ -29,6 +29,8 @@ class ParticipationReferencingTest { @DisplayName("resolves a reference to a VitruvDomain") def void domainReference() { assertThat(parseAndValidate(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -40,7 +42,7 @@ class ParticipationReferencingTest { parts += commonalities.ParticipationClass => [ superMetaclass = commonalities.languageElements.EClassMetaclass .forEClass(aet.Root.eClass) - .fromDomain(commonalities.languageElements.VitruviusDomain.forVitruvDomain(aet.domain)) + .fromDomain(commonalities.languageElements.Metamodel.forEPackage(AllElementTypesPackage.eINSTANCE)) ] ], usingEqualsForReferencesTo(commonalities.languageElements.EClassMetaclass.eClass))) } diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ReferenceReferencingTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ReferenceReferencingTest.xtend index d94d7ebe2d..b35a397dd4 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ReferenceReferencingTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.tests/src/tools/vitruv/dsls/commonalities/tests/references/ReferenceReferencingTest.xtend @@ -29,6 +29,8 @@ class ReferenceReferencingTest { @DisplayName("resolves a reference to the declaring Commonality") def void selfReference() { val commonality = parseAndValidate(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -55,6 +57,8 @@ class ReferenceReferencingTest { commonality Target {} ''') assertThat(parseAndValidateInSet(''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { diff --git a/tests/dsls/tools.vitruv.dsls.commonalities.ui.tests/src/tools/vitruv/dsls/commonalities/ui/quickfix/MissingBundlesQuickfixTest.xtend b/tests/dsls/tools.vitruv.dsls.commonalities.ui.tests/src/tools/vitruv/dsls/commonalities/ui/quickfix/MissingBundlesQuickfixTest.xtend index b30f9f1f77..d30dcdfdc4 100644 --- a/tests/dsls/tools.vitruv.dsls.commonalities.ui.tests/src/tools/vitruv/dsls/commonalities/ui/quickfix/MissingBundlesQuickfixTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.commonalities.ui.tests/src/tools/vitruv/dsls/commonalities/ui/quickfix/MissingBundlesQuickfixTest.xtend @@ -70,9 +70,11 @@ class MissingBundlesQuickfixTest extends BugFixedAbstractQuickfixTest { @DisplayName("fixes a missing domain bundle dependency") def void fixMissingDomainBundle() { val testProject = setupProject() - val missingBundle = "tools.vitruv.testutils.domains" + val missingBundle = "tools.vitruv.testutils.metamodels" val testCommonality = ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { @@ -98,6 +100,8 @@ class MissingBundlesQuickfixTest extends BugFixedAbstractQuickfixTest { createProjectAt(projectName, projectLocation) => [configureAsJavaProject()] val testCommonality = ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as AllElementTypes + concept test commonality Test { diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/ComplexRoutineLogicTests.xtend b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/ComplexRoutineLogicTests.xtend index a65f921d9e..3640b22add 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/ComplexRoutineLogicTests.xtend +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/ComplexRoutineLogicTests.xtend @@ -1,116 +1,74 @@ -//package tools.vitruv.dsls.reactions.builder -// -//import org.eclipse.emf.ecore.EClass -//import org.eclipse.xtext.common.types.JvmDeclaredType -//import org.eclipse.xtext.common.types.TypesFactory -//import org.eclipse.xtext.testing.InjectWith -//import org.eclipse.xtext.testing.XtextRunner -//import org.eclipse.xtext.xbase.XbaseFactory -//import org.junit.Test -//import org.junit.runner.RunWith -//import tools.vitruv.dsls.reactions.builder.FluentRoutineBuilder.RoutineTypeProvider -//import tools.vitruv.dsls.reactions.tests.ReactionsLanguageInjectorProvider -// -//import static org.hamcrest.MatcherAssert.assertThat -// -//@RunWith(XtextRunner) -//@InjectWith(ReactionsLanguageInjectorProvider) -//class ComplexRoutineLogicTests extends FluentReactionsBuilderTest { -// -// private def findMethod(RoutineTypeProvider provider, EClass metaclass, String method) { -// val package = metaclass.instanceTypeName -// val type = provider.findTypeByName(package) as JvmDeclaredType -// type.members.findFirst[simpleName == method] -// } -// -// @Test -// def void ts() { -// val builder = create.reactionsFile('createRootTest') += -// create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). -// executeActionsIn(AllElementTypes) += create.reaction('CreateRootTest').afterElement(Root).created.call [ -// input[affectedEObject.apply(Root)] -// action [ -// execute[ provider | -// XbaseFactory.eINSTANCE.createXBlockExpression => [ -// /*val firstValue= XbaseFactory.eINSTANCE.createXVariableDeclaration => [ -// * name = 'a' -// * right = XbaseFactory.eINSTANCE.createXNumberLiteral => [ -// * value = '20' -// * ] -// * writeable = true -// * ] -// expressions += firstValue*/ -// val varA = XbaseFactory.eINSTANCE.createXVariableDeclaration => [ -// name = 'varA' -// writeable = true -// right = XbaseFactory.eINSTANCE.createXNumberLiteral => [ -// value = ' 10' -// ] -// ] -// expressions += varA -// expressions += XbaseFactory.eINSTANCE.createXAssignment => [ -// feature = varA -// value = XbaseFactory.eINSTANCE.createXNumberLiteral => [ -// value = ' 15' -// ] -// ] -// -//// val loopVariable = TypesFactory.eINSTANCE.createJvmFormalParameter => [ -//// name = '_references' -//// ] -//// expressions += XbaseFactory.eINSTANCE.createXVariableDeclaration => [ -//// name = '_references' -//// right = XbaseFactory.eINSTANCE.createXFeatureCall => [ -//// feature = loopVariable -//// ] -//// ] -//// expressions += XbaseFactory.eINSTANCE.createXForLoopExpression => [ -//// it.declaredParam = loopVariable -//// it.forExpression = XbaseFactory.eINSTANCE.createXMemberFeatureCall => [ -//// memberCallTarget = provider.variable('affectedEObject') -//// //feature = provider.findMethod(Root, 'getMultiValuedContainmentEReference') -//// feature = TypesFactory.eINSTANCE.createJv => [ -//// name = 'multiValuedContainmentEReference' -//// ] -//// ] -//// it.eachExpression = XbaseFactory.eINSTANCE.createXBlockExpression => [ -//// /*expressions += XbaseFactory.eINSTANCE.createXAssignment => [ -//// feature = loopVariable -//// value = XbaseFactory.eINSTANCE.createXNumberLiteral => [ -//// value = '20' -//// ] -//// ]*/ -//// ] -//// ] -// /* -// expressions += */ -// ] -// ] -// ] -// ] -// -// val reactionResult = ''' -// import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes -// -// reactions: simpleChangesRootTests in reaction to changes in AllElementTypes -// execute actions in AllElementTypes -// -// reaction CreateRootTest { -// after element allElementTypes::Root created -// call createRootTestRepair(affectedEObject) -// } -// -// routine createRootTestRepair(allElementTypes::Root affectedEObject) { -// action { -// execute { -// var varA = 10 -// varA = 15 -// } -// } -// } -// ''' -// -// assertThat(builder, builds(reactionResult)) -// } -// -//} +package tools.vitruv.dsls.reactions.builder + +import org.eclipse.xtext.common.types.TypesFactory +import org.eclipse.xtext.testing.InjectWith +import org.eclipse.xtext.xbase.XbaseFactory +import tools.vitruv.dsls.reactions.tests.ReactionsLanguageInjectorProvider + +import static org.hamcrest.MatcherAssert.assertThat +import allElementTypes.AllElementTypesPackage +import org.eclipse.xtext.testing.extensions.InjectionExtension +import org.junit.jupiter.api.^extension.ExtendWith +import org.junit.jupiter.api.Test + +@ExtendWith(InjectionExtension) +@InjectWith(ReactionsLanguageInjectorProvider) +class ComplexRoutineLogicTests extends FluentReactionsBuilderTest { + + @Test + def void ts() { + val builder = create.reactionsFile('createRootTest') += + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += + create.reaction('CreateRootTest').afterElement(Root).created.call [ + action [ + execute[ provider | + XbaseFactory.eINSTANCE.createXBlockExpression => [ + val loopVariable = TypesFactory.eINSTANCE.createJvmFormalParameter => [ + name = 'b' + ] + expressions += XbaseFactory.eINSTANCE.createXForLoopExpression => [ + it.declaredParam = loopVariable + it.forExpression = XbaseFactory.eINSTANCE.createXListLiteral => [ + it.elements += XbaseFactory.eINSTANCE.createXNumberLiteral => [ + value = '10' + ] + ] + it.eachExpression = XbaseFactory.eINSTANCE.createXBlockExpression => [ + expressions += XbaseFactory.eINSTANCE.createXAssignment => [ + feature = loopVariable + value = XbaseFactory.eINSTANCE.createXNumberLiteral => [ + value = '20' + ] + ] + ] + ] + ] + ] + ] + ] + + val reactionResult = ''' + import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes + + reactions: simpleChangesRootTests in reaction to changes in allElementTypes + execute actions in allElementTypes + + reaction CreateRootTest { + after element allElementTypes::Root created + call createRootTestRepair() + } + + routine createRootTestRepair() { + action { + execute { + for ( b : # [ 10 ] ) { b = 20 } + } + } + } + ''' + + assertThat(builder, builds(reactionResult)) + } + +} diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/FluentReactionsLanguageBuilderTests.xtend b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/FluentReactionsLanguageBuilderTests.xtend index 4f0fe1b1f6..3558495d67 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/FluentReactionsLanguageBuilderTests.xtend +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/builder/FluentReactionsLanguageBuilderTests.xtend @@ -7,13 +7,15 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.Disabled import static org.junit.jupiter.api.Assertions.assertThrows import static org.hamcrest.CoreMatchers.containsString +import allElementTypes.AllElementTypesPackage +import allElementTypes2.AllElementTypes2Package class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { @Test def void createRoot() { val builder = create.reactionsFile('createRootTest') += - create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += create.reaction('CreateRootTest').afterElement(Root).created.call [ + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('CreateRootTest').afterElement(Root).created.call [ action [ vall('newRoot').create(Root) addCorrespondenceBetween('newRoot').and.affectedEObject @@ -24,8 +26,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -46,8 +48,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { @Test def void removeRoot() { val builder = create.reactionsFile('deleteRootTest') += - create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += create.reaction('DeleteRootTest').afterElement(Root).deleted.call [ + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('DeleteRootTest').afterElement(Root).deleted.call [ match [ vall('toDelete').retrieve(Root).correspondingTo.affectedEObject ].action [ @@ -59,8 +61,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction DeleteRootTest { after element allElementTypes::Root deleted @@ -84,8 +86,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { def void importSegments() { val builder = create.reactionsFile('importTest') - val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) baseSegment += create.reaction('CreateRootTest').afterElement(Root).created.call [ action [ vall('newRoot').create(Root) @@ -93,8 +95,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] ] - val baseSegment2 = create.reactionsSegment('baseSegment2').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + val baseSegment2 = create.reactionsSegment('baseSegment2').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) baseSegment2 += create.reaction('DeleteRootTest').afterElement(Root).deleted.call [ match [ vall('toDelete').retrieve(Root).correspondingTo.affectedEObject @@ -103,8 +105,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] ] - val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes).importSegment(baseSegment).usingSimpleRoutineNames. + val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE).importSegment(baseSegment).usingSimpleRoutineNames. importSegment(baseSegment2).routinesOnly.usingQualifiedRoutineNames builder += baseSegment @@ -115,8 +117,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: baseSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -133,8 +135,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: baseSegment2 - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction DeleteRootTest { after element allElementTypes::Root deleted @@ -153,8 +155,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: extendedSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes import baseSegment import routines baseSegment2 using qualified names @@ -167,8 +169,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { def void overrideReaction() { val builder = create.reactionsFile('overrideReactionTest') - val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) baseSegment += create.reaction('CreateRootTest').afterElement(Root).created.call [ action [ vall('newRoot').create(Root) @@ -176,8 +178,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] ] - val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes).importSegment(baseSegment).usingQualifiedRoutineNames + val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE).importSegment(baseSegment).usingQualifiedRoutineNames extendedSegment += create.reaction('CreateRootTest').overrideSegment(baseSegment).afterElement(Root).created.call [ action [ @@ -193,8 +195,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: baseSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -211,8 +213,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: extendedSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes import baseSegment using qualified names @@ -236,8 +238,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { def void overrideRoutines() { val builder = create.reactionsFile('overrideRoutinesTest') - val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + val baseSegment = create.reactionsSegment('baseSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) baseSegment += create.reaction('CreateRootTest').afterElement(Root).created.call [ action [ vall('newRoot').create(Root) @@ -245,8 +247,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] ] - val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes).importSegment(baseSegment).usingQualifiedRoutineNames + val extendedSegment = create.reactionsSegment('extendedSegment').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE).importSegment(baseSegment).usingQualifiedRoutineNames extendedSegment += create.routine('createRootTestRepair') // TODO this is not working yet .overrideAlongImportPath(baseSegment).input [ model(Root, 'affectedEObject') @@ -255,8 +257,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { addCorrespondenceBetween('newRoot2').and.affectedEObject ] - val extendedSegment2 = create.reactionsSegment('extendedSegment2').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes).importSegment(extendedSegment).usingQualifiedRoutineNames + val extendedSegment2 = create.reactionsSegment('extendedSegment2').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE).importSegment(extendedSegment).usingQualifiedRoutineNames extendedSegment2 += create.routine('createRootTestRepair') // TODO this is not working yet .overrideAlongImportPath(extendedSegment, baseSegment).input [ model(Root, 'affectedEObject') @@ -273,8 +275,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: baseSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -291,8 +293,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: extendedSegment - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes import baseSegment using qualified names @@ -306,8 +308,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: extendedSegment2 - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes import extendedSegment using qualified names @@ -335,8 +337,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { def void noEmptyReactionsSegment() { val exception = assertThrows(IllegalStateException) [ val builder = create.reactionsFile('Test') += - create.reactionsSegment('empty').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + create.reactionsSegment('empty').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) matcher.build(builder) ] assertThat(exception.message, containsString("Neither routines, nor reactions, nor imports")) @@ -345,8 +347,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { @Test def void routineArgument() { val builder = create.reactionsFile('createRootTest') += - create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += create.routine('withArguments').input [ + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.routine('withArguments').input [ model(Root, 'rootParameter') model(NonRoot, 'nonRootParameter') ].action [ @@ -357,8 +359,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes routine withArguments(allElementTypes::Root rootParameter, allElementTypes::NonRoot nonRootParameter) { action { @@ -380,8 +382,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] val reactionsFile = create.reactionsFile('createRootTest') - val reactionsSegment = create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += #[ + val reactionsSegment = create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += #[ create.reaction('CreateRootTest').afterElement(Root).created.call(commonRoutine), create.reaction('CreateNonRootTest').afterElement(NonRoot).created.call(commonRoutine) ] @@ -393,8 +395,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://www.eclipse.org/emf/2002/Ecore" as ecore reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -427,8 +429,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] val reactionsFile = create.reactionsFile('createRootTest') - val reactionsSegment = create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) + val reactionsSegment = create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) reactionsSegment += commonRoutine @@ -443,8 +445,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -485,8 +487,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { ] val reactionsFile = create.reactionsFile('routineWithMatchTest') += - create.reactionsSegment('routineWithMatchTest').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += routineWithMatch + create.reactionsSegment('routineWithMatchTest').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += routineWithMatch val expectedReaction = ''' import «objectExtensionsFqn» @@ -494,8 +496,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: routineWithMatchTest - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes routine withMatch() { match { @@ -531,8 +533,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { val reaction = create.reaction('CreateRoot').afterElement(Root).created.call(routineWithMatch) - val segment = create.reactionsSegment('routineWithMatchTest').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += reaction + val segment = create.reactionsSegment('routineWithMatchTest').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += reaction segment += routineWithMatch val reactionsFile = create.reactionsFile('routineWithMatchTest') += segment @@ -543,8 +545,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { import "http://tools.vitruv.testutils.metamodels.allElementTypes" as allElementTypes reactions: routineWithMatchTest - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRoot { after element allElementTypes::Root created @@ -579,13 +581,13 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { val reactionsFile = create.reactionsFile('createRootTest') reactionsFile += - create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('CreateRootTest').afterElement(Root).created.call(commonRoutine) reactionsFile += - create.reactionsSegment('simpleChangesRoot2Tests').inReactionToChangesIn(AllElementTypes2). - executeActionsIn(AllElementTypes) += + create.reactionsSegment('simpleChangesRoot2Tests').inReactionToChangesIn(AllElementTypes2Package.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('CreateRoot2Test').afterElement(Root2).created.call(commonRoutine) val expectedReaction = ''' @@ -595,8 +597,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -612,8 +614,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: simpleChangesRoot2Tests - in reaction to changes in AllElementTypes2 - execute actions in AllElementTypes + in reaction to changes in allElementTypes2 + execute actions in allElementTypes reaction CreateRoot2Test { after element allElementTypes2::Root2 created @@ -637,12 +639,12 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { val reactionsFile = create.reactionsFile('createRootTest') reactionsFile += - create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypes). - executeActionsIn(AllElementTypes) += + create.reactionsSegment('simpleChangesRootTests').inReactionToChangesIn(AllElementTypesPackage.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('CreateRootTest').afterElement(Root).created.call(commonRoutine) - val secondSegment = create.reactionsSegment('simpleChangesRoot2Tests').inReactionToChangesIn(AllElementTypes2). - executeActionsIn(AllElementTypes) += + val secondSegment = create.reactionsSegment('simpleChangesRoot2Tests').inReactionToChangesIn(AllElementTypes2Package.eINSTANCE). + executeActionsIn(AllElementTypesPackage.eINSTANCE) += create.reaction('CreateRoot2Test').afterElement(Root2).created.call(commonRoutine) secondSegment += commonRoutine @@ -656,8 +658,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: simpleChangesRootTests - in reaction to changes in AllElementTypes - execute actions in AllElementTypes + in reaction to changes in allElementTypes + execute actions in allElementTypes reaction CreateRootTest { after element allElementTypes::Root created @@ -666,8 +668,8 @@ class FluentReactionsLanguageBuilderTests extends FluentReactionsBuilderTest { reactions: simpleChangesRoot2Tests - in reaction to changes in AllElementTypes2 - execute actions in AllElementTypes + in reaction to changes in allElementTypes2 + execute actions in allElementTypes reaction CreateRoot2Test { after element allElementTypes2::Root2 created diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/generator/ReactionsGeneratorTest.xtend b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/generator/ReactionsGeneratorTest.xtend index 2df77ef138..71838c79c3 100755 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/generator/ReactionsGeneratorTest.xtend +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/generator/ReactionsGeneratorTest.xtend @@ -12,13 +12,13 @@ import tools.vitruv.dsls.reactions.api.generator.IReactionsGenerator import tools.vitruv.dsls.reactions.builder.FluentReactionsLanguageBuilder import tools.vitruv.dsls.reactions.builder.TypeProvider import tools.vitruv.dsls.reactions.tests.ReactionsLanguageInjectorProvider -import tools.vitruv.testutils.domains.AllElementTypesDomainProvider import static org.hamcrest.CoreMatchers.* import static org.hamcrest.MatcherAssert.assertThat import org.junit.jupiter.api.^extension.ExtendWith import org.eclipse.xtext.testing.extensions.InjectionExtension import org.junit.jupiter.api.Test +import allElementTypes.AllElementTypesPackage @ExtendWith(InjectionExtension) @InjectWith(ReactionsLanguageInjectorProvider) @@ -27,7 +27,6 @@ class ReactionsGeneratorTest { @Inject Provider fsaProvider @Inject Provider generatorProvider @Inject Provider resourceSetProvider - static val allElementTypesDomain = new AllElementTypesDomainProvider().domain static val CHANGE_PROPAGATION_SPEC_NAME_SUFFIX = 'ChangePropagationSpecification' static val EXECUTOR_CLASS_NAME = 'ReactionsExecutor' static val REACTION_NAME = 'TestReaction' @@ -40,8 +39,8 @@ class ReactionsGeneratorTest { val create = new FluentReactionsLanguageBuilder() val fileBuilder = create.reactionsFile(reactionsFileName); fileBuilder += - create.reactionsSegment(reactionsFileName).inReactionToChangesIn(allElementTypesDomain).executeActionsIn( - allElementTypesDomain) += create.reaction(reactionName).afterAnyChange. + create.reactionsSegment(reactionsFileName).inReactionToChangesIn(AllElementTypesPackage.eINSTANCE).executeActionsIn( + AllElementTypesPackage.eINSTANCE) += create.reaction(reactionName).afterAnyChange. call [ action[ execute[createPrintlnStatement] diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/AllElementTypesRedundancy.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/AllElementTypesRedundancy.reactions index 251ee80b35..b70787fa5f 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/AllElementTypesRedundancy.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/AllElementTypesRedundancy.reactions @@ -8,8 +8,8 @@ import tools.vitruv.testutils.domains.AllElementTypesDomainProvider import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: simpleChangesTests -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal /* * Creates the model for comparing the further test model with. diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/CommonRoutines.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/CommonRoutines.reactions index 7c5d573c14..f893512168 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/CommonRoutines.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/CommonRoutines.reactions @@ -5,8 +5,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsExecution import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsCommonRoutines -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal routine commonRoutinesRoutine1() { action { diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Direct2SN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Direct2SN.reactions index 715c5df83c..0775847f83 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Direct2SN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Direct2SN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsDirect2SN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal import importTestsTransitive3SN diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectRoutinesQN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectRoutinesQN.reactions index 5439d0e3f8..b36a50c0f8 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectRoutinesQN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectRoutinesQN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsDirectRoutinesQN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal import importTestsTransitive2SN import routines importTestsTransitiveRoutinesSN diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectSN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectSN.reactions index 80cadca482..ab789f99d7 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectSN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/DirectSN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsDirectSN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal import importTestsTransitiveSN import routines importTestsTransitiveRoutinesQN using qualified names diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Root.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Root.reactions index 722203e82c..c24ca8aff4 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Root.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Root.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsRoot -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal import importTestsDirectSN import importTestsDirect2SN diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive2SN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive2SN.reactions index 14fac08c55..c8b6763cee 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive2SN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive2SN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsTransitive2SN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal reaction Transitive2SNReaction { after attribute replaced at minimal::Root[id] diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive3SN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive3SN.reactions index a8a698512c..ad5fb8db25 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive3SN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/Transitive3SN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsTransitive3SN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal reaction Transitive3SNReaction { after attribute replaced at minimal::Root[id] diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesQN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesQN.reactions index c167555d48..9f823abfab 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesQN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesQN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsTransitiveRoutinesQN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal reaction TransitiveRoutinesQNReaction { after attribute replaced at minimal::Root[id] diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesSN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesSN.reactions index 53abed1038..a10a29f206 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesSN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveRoutinesSN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsTransitiveRoutinesSN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal reaction TransitiveRoutinesSNReaction { after attribute replaced at minimal::Root[id] diff --git a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveSN.reactions b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveSN.reactions index bd99e7ae1c..f095638564 100644 --- a/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveSN.reactions +++ b/tests/dsls/tools.vitruv.dsls.reactions.tests/src/tools/vitruv/dsls/reactions/tests/importTests/TransitiveSN.reactions @@ -7,8 +7,8 @@ import static tools.vitruv.dsls.reactions.tests.importTests.ImportTestsUtils.* import "http://tools.vitruv.testutils.metamodels.allElementTypes" as minimal reactions: importTestsTransitiveSN -in reaction to changes in AllElementTypes -execute actions in AllElementTypes +in reaction to changes in minimal +execute actions in minimal import routines importTestsCommonRoutines using qualified names