Skip to content

Commit

Permalink
Remove TUIDs
Browse files Browse the repository at this point in the history
  • Loading branch information
HeikoKlare committed Feb 19, 2021
1 parent 4db9bbd commit 16e7a39
Show file tree
Hide file tree
Showing 67 changed files with 71 additions and 2,567 deletions.
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
package tools.vitruv.domains.demo

import tools.vitruv.framework.domains.AbstractTuidAwareVitruvDomain
import org.eclipse.emf.ecore.EPackage
import org.eclipse.emf.ecore.EAttribute
import tools.vitruv.framework.tuid.AttributeTuidCalculatorAndResolver
import tools.vitruv.framework.domains.AbstractVitruvDomain

abstract class VitruvDemoDomain extends AbstractTuidAwareVitruvDomain {
abstract class VitruvDemoDomain extends AbstractVitruvDomain {

new(String name, EPackage metamodelRootPackage, Iterable<EAttribute> identifyingAttributes, String... fileExtensions) {
super(name, metamodelRootPackage,
new AttributeTuidCalculatorAndResolver(metamodelRootPackage.nsURI, identifyingAttributes.map[it.name]),
fileExtensions)
super(name, metamodelRootPackage, fileExtensions)
}

override isUserVisible() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@ package tools.vitruv.dsls.commonalities.generator.domain

import org.eclipse.emf.ecore.EPackage
import tools.vitruv.extensions.dslruntime.commonalities.IntermediateVitruvDomain
import tools.vitruv.extensions.dslruntime.commonalities.intermediatemodelbase.IntermediateModelBasePackage
import tools.vitruv.framework.domains.VitruvDomain
import tools.vitruv.framework.domains.VitruvDomainProvider
import tools.vitruv.framework.tuid.AttributeTuidCalculatorAndResolver

import static extension tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainConstants.*
import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
Expand All @@ -25,8 +23,6 @@ class ConceptDomain extends IntermediateVitruvDomain {

new(String conceptName, EPackage conceptPackage) {
super(conceptName.conceptDomainName, conceptPackage,
new AttributeTuidCalculatorAndResolver(conceptPackage.nsURI,
IntermediateModelBasePackage.eINSTANCE.intermediate_IntermediateId.name),
conceptName.intermediateModelFileExtension)
provider = new Provider(this, conceptName.conceptDomainProviderClassName.qualifiedName)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,7 @@ 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.extensions.dslruntime.commonalities.intermediatemodelbase.IntermediateModelBasePackage
import tools.vitruv.framework.domains.VitruvDomainProvider
import tools.vitruv.framework.tuid.AttributeTuidCalculatorAndResolver

import static extension tools.vitruv.dsls.commonalities.generator.domain.ConceptDomainConstants.*
import static extension tools.vitruv.dsls.commonalities.generator.intermediatemodel.IntermediateModelConstants.*
Expand Down Expand Up @@ -66,13 +64,7 @@ class ConceptDomainGenerator implements SubGenerator {
visibility = JvmVisibility.PUBLIC
body = '''
super("«conceptName.conceptDomainName»",
«'''«conceptName.intermediateMetamodelPackageClassName.simpleName»'''».eINSTANCE,«
»«
// Tuid calculation: Uses the 'intermediateId' attribute
// This attribute delegates to 'fullPath' for intermediate resource bridges
// TODO remove once resource creation is handled by domains
»
new «AttributeTuidCalculatorAndResolver.typeRef»("«conceptName.intermediateMetamodelPackage.nsURI»", "«IntermediateModelBasePackage.eINSTANCE.intermediate_IntermediateId.name»"),
«'''«conceptName.intermediateMetamodelPackageClassName.simpleName»'''».eINSTANCE,
"«conceptName.intermediateModelFileExtension»");'''
]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,6 @@ class RoutineClassGenerator extends ClassGenerator {
«IF !name.nullOrEmpty»«List»<«typeName»> «name» = «ENDIF»getCorrespondingElements(
«generalArguments»
);
for (EObject _element : «name») {
registerObjectUnderModification(_element);
}
'''
currentlyAccessibleElements += new AccessibleElement(name, List.name, typeName);
return statement;
Expand Down Expand Up @@ -212,7 +209,6 @@ class RoutineClassGenerator extends ClassGenerator {
if («name» == null) {
return false;
}«ENDIF»
registerObjectUnderModification(«IF retrieveElement.optional»«name».isPresent() ? «name».get() : null«ELSE»«name»«ENDIF»);
'''
if (retrieveElement.optional) {
currentlyAccessibleElements += new AccessibleElement(name, Optional.name, typeName);
Expand Down Expand Up @@ -330,8 +326,6 @@ class RoutineClassGenerator extends ClassGenerator {
«effectStatementsMap.get(effectStatement)»
«ENDFOR»
postprocessElements();
return true;
'''
];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,18 @@ 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.AbstractTuidAwareVitruvDomain
import tools.vitruv.framework.tuid.TuidCalculatorAndResolver
import tools.vitruv.framework.domains.AbstractVitruvDomain

abstract class IntermediateVitruvDomain extends AbstractTuidAwareVitruvDomain {
abstract class IntermediateVitruvDomain extends AbstractVitruvDomain {

new(String name, EPackage metamodelRootPackage, Set<EPackage> furtherRootPackages,
TuidCalculatorAndResolver tuidCalculator, String... fileExtensions) {
super(name, metamodelRootPackage, furtherRootPackages, tuidCalculator, fileExtensions)
new(String name, EPackage metamodelRootPackage, Set<EPackage> furtherRootPackages, String... fileExtensions) {
super(name, metamodelRootPackage, furtherRootPackages, fileExtensions)
}

new(String name, EPackage metamodelRootPackage, TuidCalculatorAndResolver tuidCalculator,
String... fileExtensions) {
super(name, metamodelRootPackage, tuidCalculator, fileExtensions)
new(String name, EPackage metamodelRootPackage, String... fileExtensions) {
super(name, metamodelRootPackage, fileExtensions)
}

override shouldTransitivelyPropagateChanges() {
true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import tools.vitruv.extensions.dslruntime.commonalities.resources.Resource
import tools.vitruv.extensions.dslruntime.commonalities.resources.ResourcesPackage
import tools.vitruv.extensions.dslsruntime.reactions.helper.PersistenceHelper
import tools.vitruv.extensions.dslsruntime.reactions.helper.ReactionsCorrespondenceHelper
import tools.vitruv.framework.tuid.TuidManager
import tools.vitruv.framework.util.datatypes.VURI

import static com.google.common.base.Preconditions.*
Expand Down Expand Up @@ -95,7 +94,6 @@ class IntermediateResourceBridgeI extends IntermediateResourceBridgeImpl {
}

private def persist() {
TuidManager.instance.updateTuidsOfRegisteredObjects()
resourceAccess.persistAsRoot(content, VURI.getInstance(resourceUri))
this.isPersisted = true
if (eContainer === null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ Require-Bundle: org.apache.log4j;visibility:=reexport,
org.eclipse.xtend.lib;visibility:=reexport,
org.eclipse.core.resources,
org.eclipse.core.runtime,
org.eclipse.emf.ecore;visibility:=reexport,
tools.vitruv.framework.correspondence;visibility:=reexport,
tools.vitruv.framework.uuid;visibility:=reexport,
tools.vitruv.framework.change;visibility:=reexport,
tools.vitruv.framework.change.processing;visibility:=reexport,
tools.vitruv.framework.domains,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package tools.vitruv.extensions.dslsruntime.reactions
import tools.vitruv.extensions.dslsruntime.reactions.IReactionRealization
import tools.vitruv.extensions.dslsruntime.reactions.structure.CallHierarchyHaving
import tools.vitruv.framework.change.echange.EChange
import tools.vitruv.framework.tuid.TuidManager
import org.eclipse.xtend.lib.annotations.Accessors
import tools.vitruv.framework.userinteraction.UserInteractor

Expand Down Expand Up @@ -35,11 +34,6 @@ abstract class AbstractReactionRealization extends CallHierarchyHaving implement
} finally {
// reset the routines facade execution state:
routinesFacade._getExecutionState().reset();

// The reactions was completely executed, so remove all objects registered for modification
// by the effects as they are no longer under modification
// even if there was an exception!
TuidManager.instance.flushRegisteredObjectsUnderModification();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import tools.vitruv.extensions.dslsruntime.reactions.helper.ReactionsCorresponde
import tools.vitruv.extensions.dslsruntime.reactions.structure.CallHierarchyHaving
import tools.vitruv.extensions.dslsruntime.reactions.structure.Loggable
import tools.vitruv.framework.correspondence.CorrespondenceModel
import tools.vitruv.framework.tuid.TuidManager
import tools.vitruv.framework.userinteraction.UserInteractor
import tools.vitruv.framework.util.command.ResourceAccess
import tools.vitruv.framework.util.datatypes.VURI
Expand Down Expand Up @@ -152,10 +151,7 @@ abstract class AbstractRepairRoutineRealization extends CallHierarchyHaving impl
private def persistAsRoot(EObject rootObject, VURI vuri) {
logger.trace("Registered to persist root " + rootObject + " in: " + vuri)
if (rootObject.eResource?.URI !== vuri.EMFUri) {
// Update TUID after removal, as persistence will also change it and rely on an up-to-date value
TuidManager.getInstance().registerObjectUnderModification(rootObject)
EcoreUtil.remove(rootObject)
TuidManager.getInstance().updateTuidsOfRegisteredObjects()
resourceAccess.persistAsRoot(rootObject, vuri)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,4 @@ interface ReactionElementsHandler {
def void addCorrespondenceBetween(EObject firstElement, EObject secondElement, String tag);
def void removeCorrespondenceBetween(EObject firstElement, EObject secondElement, String tag);
def void deleteObject(EObject element);
def void registerObjectUnderModification(EObject element);
def void postprocessElements();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tools.vitruv.extensions.dslsruntime.reactions.effects

import org.eclipse.emf.ecore.EObject
import tools.vitruv.framework.correspondence.CorrespondenceModel
import tools.vitruv.framework.tuid.TuidManager
import tools.vitruv.extensions.dslsruntime.reactions.helper.ReactionsCorrespondenceHelper
import org.eclipse.emf.ecore.util.EcoreUtil
import org.apache.log4j.Logger
Expand All @@ -18,8 +17,6 @@ class ReactionElementsHandlerImpl implements ReactionElementsHandler {
}

override void addCorrespondenceBetween(EObject firstElement, EObject secondElement, String tag) {
registerObjectUnderModification(firstElement);
registerObjectUnderModification(secondElement);
ReactionsCorrespondenceHelper.addCorrespondence(correspondenceModel, firstElement, secondElement, tag);
}

Expand All @@ -30,29 +27,11 @@ class ReactionElementsHandlerImpl implements ReactionElementsHandler {
ReactionsCorrespondenceHelper.removeCorrespondencesOfObject(correspondenceModel, element);
logger.debug("Removing object " + element + " from container " + element.eContainer());
EcoreUtil.remove(element);
// If we delete an object, we have to update Tuids because Tuids of child elements
// may have to be resolved for removing correspondences as well and must therefore be up-to-date
TuidManager.instance.updateTuidsOfRegisteredObjects();
}

override void removeCorrespondenceBetween(EObject firstElement, EObject secondElement, String tag) {
ReactionsCorrespondenceHelper.removeCorrespondencesBetweenElements(correspondenceModel,
firstElement, secondElement, tag);
}

override registerObjectUnderModification(EObject element) {
if (element !== null) {
TuidManager.instance.registerObjectUnderModification(element);
if (element.eContainer !== null) {
TuidManager.instance.registerObjectUnderModification(element.eContainer);
}

}
}

override postprocessElements() {
// Modifications are finished, so update the Tuids
TuidManager.instance.updateTuidsOfRegisteredObjects();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ Bundle-Vendor: %providerName
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-11
Bundle-ActivationPolicy: lazy
Require-Bundle: tools.vitruv.extensions.dslsruntime.reactions;visibility:=reexport,
tools.vitruv.framework.tuid
Require-Bundle: tools.vitruv.extensions.dslsruntime.reactions;visibility:=reexport
Export-Package: tools.vitruv.extensions.integration.correspondence.integration,
tools.vitruv.extensions.integration.correspondence.integration.impl,
tools.vitruv.extensions.integration.correspondence.integration.util,
Expand Down
1 change: 0 additions & 1 deletion bundles/framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
<module>tools.vitruv.framework.correspondence</module>
<module>tools.vitruv.framework.domains</module>
<module>tools.vitruv.framework.domains.ui</module>
<module>tools.vitruv.framework.tuid</module>
<module>tools.vitruv.framework.userinteracting</module>
<module>tools.vitruv.framework.util</module>
<module>tools.vitruv.framework.uuid</module>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ Require-Bundle: org.apache.log4j,
tools.vitruv.framework.correspondence;visibility:=reexport,
tools.vitruv.framework.userinteraction;visibility:=reexport,
tools.vitruv.framework.change;visibility:=reexport,
tools.vitruv.framework.domains
tools.vitruv.framework.domains,
tools.vitruv.framework.util
Export-Package: tools.vitruv.framework.change.processing,
tools.vitruv.framework.change.processing.impl
Bundle-Vendor: vitruv.tools
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: org.apache.log4j,
org.eclipse.xtend.lib,
org.eclipse.emf.ecore.change,
tools.vitruv.framework.tuid,
tools.vitruv.framework.change.echange;visibility:=reexport,
tools.vitruv.framework.change.interaction
tools.vitruv.framework.change.interaction,
tools.vitruv.framework.util
Export-Package: tools.vitruv.framework.change.description,
tools.vitruv.framework.change.preparation,
tools.vitruv.framework.change.recording,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
package tools.vitruv.framework.change.description.impl

import org.eclipse.emf.ecore.EObject
import org.eclipse.emf.ecore.InternalEObject
import org.eclipse.emf.ecore.util.EcoreUtil
import tools.vitruv.framework.change.echange.EChange
import tools.vitruv.framework.change.echange.resolve.EChangeUnresolver
import tools.vitruv.framework.change.echange.root.RootEChange
import tools.vitruv.framework.tuid.TuidManager
import tools.vitruv.framework.util.datatypes.VURI
import tools.vitruv.framework.uuid.UuidResolver

Expand All @@ -25,20 +23,16 @@ class ConcreteApplicableChangeImpl extends ConcreteChangeImpl {
// TODO HK Make a copy of the complete change instead of replacing it internally
this.EChange = this.EChange.resolveBefore(uuidResolver)
tryToSetUri;
this.registerOldObjectTuidsForUpdate(getObjectsWithPotentiallyModifiedTuids)
this.EChange.applyForward;
tryToSetUri;
this.updateTuids
}

override resolveAfterAndApplyBackward(UuidResolver uuidResolver) {
// TODO HK Make a copy of the complete change instead of replacing it internally
this.EChange = this.EChange.resolveAfter(uuidResolver)
tryToSetUri;
this.registerOldObjectTuidsForUpdate(getObjectsWithPotentiallyModifiedTuids)
this.EChange.applyBackward;
tryToSetUri;
this.updateTuids
}

private def void tryToSetUri() {
Expand All @@ -62,25 +56,6 @@ class ConcreteApplicableChangeImpl extends ConcreteChangeImpl {
return vuri;
}

private def getObjectsWithPotentiallyModifiedTuids() {
// We currently support 3 hierarchy layers upwards update. This is necessary
// e.g. for Operations whose TUIDs depend on the values of their parameter type references.
// This number of layers may still be too few, this is just a random number.
this.affectedEObjects.map[#{it, it.eContainer, it.eContainer?.eContainer, it.eContainer?.eContainer?.eContainer}].flatten.filterNull.toSet
}

private def void registerOldObjectTuidsForUpdate(Iterable<EObject> objects) {
val tuidManager = TuidManager.instance
for (object : objects) {
tuidManager.registerObjectUnderModification(object)
}
}

private def void updateTuids() {
TuidManager.instance.updateTuidsOfRegisteredObjects
TuidManager.instance.flushRegisteredObjectsUnderModification
}

override unresolveIfApplicable() {
EChanges.forEach[EChangeUnresolver.unresolve(it)]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: org.apache.log4j,
org.eclipse.xtend.lib,
org.eclipse.emf.ecore.change,
tools.vitruv.framework.domains,
tools.vitruv.framework.uuid;visibility:=reexport
org.eclipse.core.runtime,
org.eclipse.emf.ecore;visibility:=reexport,
tools.vitruv.framework.uuid;visibility:=reexport,
tools.vitruv.framework.util
Bundle-ActivationPolicy: lazy
Export-Package: tools.vitruv.framework.correspondence,
tools.vitruv.framework.correspondence.impl,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,11 @@
upperBound="-1" eType="#//Correspondence" eOpposite="#//Correspondence/dependedOnBy"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="dependedOnBy" ordered="false"
upperBound="-1" eType="#//Correspondence" eOpposite="#//Correspondence/dependsOn"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="aTuids" upperBound="-1"
eType="#//Tuid"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="bTuids" upperBound="-1"
eType="#//Tuid"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="aUuids" upperBound="-1"
eType="ecore:EDataType ../../tools.vitruv.framework.uuid/model/Uuid.ecore#//Uuid"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="bUuids" upperBound="-1"
eType="ecore:EDataType ../../tools.vitruv.framework.uuid/model/Uuid.ecore#//Uuid"/>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="tag" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="ManualCorrespondence" eSuperTypes="#//Correspondence"/>
<eClassifiers xsi:type="ecore:EDataType" name="Tuid" instanceClassName="tools.vitruv.framework.tuid.Tuid"/>
</ecore:EPackage>
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,13 @@
<foreignModel>correspondence.ecore</foreignModel>
<genPackages prefix="Correspondence" basePackage="tools.vitruv.framework" disposableProviderFactory="true"
ecorePackage="correspondence.ecore#/">
<genDataTypes ecoreDataType="correspondence.ecore#//Tuid"/>
<genClasses ecoreClass="correspondence.ecore#//Correspondences">
<genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference correspondence.ecore#//Correspondences/correspondences"/>
</genClasses>
<genClasses image="false" ecoreClass="correspondence.ecore#//Correspondence">
<genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference correspondence.ecore#//Correspondence/parent"/>
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference correspondence.ecore#//Correspondence/dependsOn"/>
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference correspondence.ecore#//Correspondence/dependedOnBy"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute correspondence.ecore#//Correspondence/aTuids"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute correspondence.ecore#//Correspondence/bTuids"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute correspondence.ecore#//Correspondence/aUuids"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute correspondence.ecore#//Correspondence/bUuids"/>
<genFeatures createChild="false" ecoreFeature="ecore:EAttribute correspondence.ecore#//Correspondence/tag"/>
Expand Down
Loading

0 comments on commit 16e7a39

Please sign in to comment.