Complete unit tests for CRUD + necessary updates
Change-Id: I885d527a447037e63116c1e562588e10017f7848
diff --git a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
index 9a28632..d60436a 100644
--- a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
+++ b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin
@@ -70,4 +70,277 @@
<mappings xmi:id="_pOe34BG6Eeqxptn-OOol6g" origin="_pOdpwBG6Eeqxptn-OOol6g" image="_pOeQ0BG6Eeqxptn-OOol6g"/>
<mappings xmi:id="_wMfy4RG6Eeqxptn-OOol6g" origin="_wMfL0BG6Eeqxptn-OOol6g" image="_wMfy4BG6Eeqxptn-OOol6g"/>
</units>
+ <units xsi:type="henshin:Rule" xmi:id="_0rWAkCTxEeqQuPO741JcQw" name="create1">
+ <annotations xmi:id="_0rWAkSTxEeqQuPO741JcQw" key="featureModel" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_0rWAkiTxEeqQuPO741JcQw" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_0rWAkyTxEeqQuPO741JcQw" key="features" value="M, F"/>
+ <lhs xmi:id="_0rWAlCTxEeqQuPO741JcQw" name="Lhs">
+ <nodes xmi:id="_0rWAlSTxEeqQuPO741JcQw" outgoing="_0rWAnSTxEeqQuPO741JcQw _0rWAnyTxEeqQuPO741JcQw _0rWAoSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAliTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_0rWAlyTxEeqQuPO741JcQw" incoming="_0rWAnSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAmCTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_0rWAmSTxEeqQuPO741JcQw" incoming="_0rWAnyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAmiTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_0rWAmyTxEeqQuPO741JcQw" incoming="_0rWAoSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAnCTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_0rWAnSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAlyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAniTxEeqQuPO741JcQw" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_0rWAnyTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmSTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAoCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_0rWAoSTxEeqQuPO741JcQw" source="_0rWAlSTxEeqQuPO741JcQw" target="_0rWAmyTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAoiTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_0rWAoyTxEeqQuPO741JcQw" name="Rhs">
+ <nodes xmi:id="_0rWApCTxEeqQuPO741JcQw" outgoing="_0rWArCTxEeqQuPO741JcQw _0rWAriTxEeqQuPO741JcQw _0rWAsCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWApSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_0rWApiTxEeqQuPO741JcQw" incoming="_0rWArCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWApyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_0rWAqCTxEeqQuPO741JcQw" incoming="_0rWAriTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAqSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_0rWAqiTxEeqQuPO741JcQw" incoming="_0rWAsCTxEeqQuPO741JcQw" outgoing="_akKm4CTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_0rWAqyTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_7tIoUCTxEeqQuPO741JcQw" incoming="_akKm4CTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_7tMSsCTxEeqQuPO741JcQw" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Annotation"/>
+ </nodes>
+ <edges xmi:id="_0rWArCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWApiTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWArSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_0rWAriTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAryTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_0rWAsCTxEeqQuPO741JcQw" source="_0rWApCTxEeqQuPO741JcQw" target="_0rWAqiTxEeqQuPO741JcQw">
+ <annotations xmi:id="_0rWAsSTxEeqQuPO741JcQw" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_akKm4CTyEeqmvcN2WI4rvQ" source="_0rWAqiTxEeqQuPO741JcQw" target="_7tIoUCTxEeqQuPO741JcQw">
+ <annotations xmi:id="_akPfYCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Method/annotation"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_0rWAsiTxEeqQuPO741JcQw" origin="_0rWAlSTxEeqQuPO741JcQw" image="_0rWApCTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAsyTxEeqQuPO741JcQw" origin="_0rWAlyTxEeqQuPO741JcQw" image="_0rWApiTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAtCTxEeqQuPO741JcQw" origin="_0rWAmSTxEeqQuPO741JcQw" image="_0rWAqCTxEeqQuPO741JcQw"/>
+ <mappings xmi:id="_0rWAtSTxEeqQuPO741JcQw" origin="_0rWAmyTxEeqQuPO741JcQw" image="_0rWAqiTxEeqQuPO741JcQw"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_52y8UCTyEeqmvcN2WI4rvQ" name="create2">
+ <annotations xmi:id="_52y8USTyEeqmvcN2WI4rvQ" key="featureModel" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_52y8UiTyEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_52y8UyTyEeqmvcN2WI4rvQ" key="features" value="M, F"/>
+ <lhs xmi:id="_52y8VCTyEeqmvcN2WI4rvQ" name="Lhs">
+ <nodes xmi:id="_52y8VSTyEeqmvcN2WI4rvQ" outgoing="_52y8XSTyEeqmvcN2WI4rvQ _52y8XyTyEeqmvcN2WI4rvQ _52y8YSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ViTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_52y8VyTyEeqmvcN2WI4rvQ" incoming="_52y8XSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8WCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8WSTyEeqmvcN2WI4rvQ" incoming="_52y8XyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8WiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_52y8WyTyEeqmvcN2WI4rvQ" incoming="_52y8YSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8XCTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_52y8XSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8VyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8XiTyEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8XyTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WSTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8YCTyEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_52y8YSTyEeqmvcN2WI4rvQ" source="_52y8VSTyEeqmvcN2WI4rvQ" target="_52y8WyTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8YiTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_52y8YyTyEeqmvcN2WI4rvQ" name="Rhs">
+ <nodes xmi:id="_52y8ZCTyEeqmvcN2WI4rvQ" outgoing="_52y8biTyEeqmvcN2WI4rvQ _52y8cCTyEeqmvcN2WI4rvQ _52y8ciTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ZSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_52y8ZiTyEeqmvcN2WI4rvQ" incoming="_52y8biTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ZyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8aCTyEeqmvcN2WI4rvQ" incoming="_52y8cCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8aSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_52y8aiTyEeqmvcN2WI4rvQ" incoming="_52y8ciTyEeqmvcN2WI4rvQ" outgoing="_52y8dCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8ayTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_52y8bCTyEeqmvcN2WI4rvQ" incoming="_52y8dCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8bSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Annotation"/>
+ </nodes>
+ <edges xmi:id="_52y8biTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8ZiTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8byTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8cCTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8cSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_52y8ciTyEeqmvcN2WI4rvQ" source="_52y8ZCTyEeqmvcN2WI4rvQ" target="_52y8aiTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8cyTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_52y8dCTyEeqmvcN2WI4rvQ" source="_52y8aiTyEeqmvcN2WI4rvQ" target="_52y8bCTyEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_52y8dSTyEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method/annotation"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_52y8diTyEeqmvcN2WI4rvQ" origin="_52y8VSTyEeqmvcN2WI4rvQ" image="_52y8ZCTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8dyTyEeqmvcN2WI4rvQ" origin="_52y8VyTyEeqmvcN2WI4rvQ" image="_52y8ZiTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8eCTyEeqmvcN2WI4rvQ" origin="_52y8WSTyEeqmvcN2WI4rvQ" image="_52y8aCTyEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_52y8eSTyEeqmvcN2WI4rvQ" origin="_52y8WyTyEeqmvcN2WI4rvQ" image="_52y8aiTyEeqmvcN2WI4rvQ"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_SrasgCTzEeqmvcN2WI4rvQ" name="delete1">
+ <annotations xmi:id="_SrasgSTzEeqmvcN2WI4rvQ" key="featureModel" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_SrasgiTzEeqmvcN2WI4rvQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_SrasgyTzEeqmvcN2WI4rvQ" key="features" value="M, F"/>
+ <lhs xmi:id="_SrashCTzEeqmvcN2WI4rvQ" name="Lhs">
+ <nodes xmi:id="_SrashSTzEeqmvcN2WI4rvQ" outgoing="_SrasjSTzEeqmvcN2WI4rvQ _SrasjyTzEeqmvcN2WI4rvQ _SraskSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrashiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_SrashyTzEeqmvcN2WI4rvQ" incoming="_SrasjSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasiCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SrasiSTzEeqmvcN2WI4rvQ" incoming="_SrasjyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasiiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_SrasiyTzEeqmvcN2WI4rvQ" incoming="_SraskSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasjCTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_SrasjSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrashyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasjiTzEeqmvcN2WI4rvQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_SrasjyTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiSTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraskCTzEeqmvcN2WI4rvQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_SraskSTzEeqmvcN2WI4rvQ" source="_SrashSTzEeqmvcN2WI4rvQ" target="_SrasiyTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraskiTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_SraskyTzEeqmvcN2WI4rvQ" name="Rhs">
+ <nodes xmi:id="_SraslCTzEeqmvcN2WI4rvQ" outgoing="_SrasnCTzEeqmvcN2WI4rvQ _SrasoCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraslSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_SrasliTzEeqmvcN2WI4rvQ" incoming="_SrasnCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SraslyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_SrasmiTzEeqmvcN2WI4rvQ" incoming="_SrasoCTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasmyTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_SrasnCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasliTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasnSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_SrasoCTzEeqmvcN2WI4rvQ" source="_SraslCTzEeqmvcN2WI4rvQ" target="_SrasmiTzEeqmvcN2WI4rvQ">
+ <annotations xmi:id="_SrasoSTzEeqmvcN2WI4rvQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_SrasoiTzEeqmvcN2WI4rvQ" origin="_SrashSTzEeqmvcN2WI4rvQ" image="_SraslCTzEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_SrasoyTzEeqmvcN2WI4rvQ" origin="_SrashyTzEeqmvcN2WI4rvQ" image="_SrasliTzEeqmvcN2WI4rvQ"/>
+ <mappings xmi:id="_SraspSTzEeqmvcN2WI4rvQ" origin="_SrasiyTzEeqmvcN2WI4rvQ" image="_SrasmiTzEeqmvcN2WI4rvQ"/>
+ </units>
+ <units xsi:type="henshin:Rule" xmi:id="_Z6vIACT1EeqBU_anwUtFuQ" name="delete2">
+ <annotations xmi:id="_Z6vIAST1EeqBU_anwUtFuQ" key="featureModel" value="(M and not F) or (not M and F)"/>
+ <annotations xmi:id="_Z6vIAiT1EeqBU_anwUtFuQ" key="injectiveMatchingPresenceCondition" value=""/>
+ <annotations xmi:id="_Z6vIAyT1EeqBU_anwUtFuQ" key="features" value="M, F"/>
+ <lhs xmi:id="_Z6vIBCT1EeqBU_anwUtFuQ" name="Lhs">
+ <nodes xmi:id="_Z6vIBST1EeqBU_anwUtFuQ" outgoing="_Z6vIDST1EeqBU_anwUtFuQ _Z6vIDyT1EeqBU_anwUtFuQ _Z6vIEST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIBiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Z6vIByT1EeqBU_anwUtFuQ" incoming="_Z6vIDST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vICCT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_Z6vICST1EeqBU_anwUtFuQ" incoming="_Z6vIDyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vICiT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <nodes xmi:id="_Z6vICyT1EeqBU_anwUtFuQ" incoming="_Z6vIEST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIDCT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <edges xmi:id="_Z6vIDST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vIByT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIDiT1EeqBU_anwUtFuQ" key="presenceCondition" value="M"/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_Z6vIDyT1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICST1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIECT1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ <edges xmi:id="_Z6vIEST1EeqBU_anwUtFuQ" source="_Z6vIBST1EeqBU_anwUtFuQ" target="_Z6vICyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIEiT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ </lhs>
+ <rhs xmi:id="_Z6vIEyT1EeqBU_anwUtFuQ" name="Rhs">
+ <nodes xmi:id="_Z6vIFCT1EeqBU_anwUtFuQ" outgoing="_Z6vIGiT1EeqBU_anwUtFuQ _ggCBAyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIFST1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class"/>
+ </nodes>
+ <nodes xmi:id="_Z6vIFiT1EeqBU_anwUtFuQ" incoming="_Z6vIGiT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIFyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Method"/>
+ </nodes>
+ <nodes xmi:id="_ggCBACT1EeqBU_anwUtFuQ" incoming="_ggCBAyT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_ggCBAST1EeqBU_anwUtFuQ" key="presenceCondition" value="F"/>
+ <type href="Java.ecore#//Field"/>
+ </nodes>
+ <edges xmi:id="_Z6vIGiT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_Z6vIFiT1EeqBU_anwUtFuQ">
+ <annotations xmi:id="_Z6vIGyT1EeqBU_anwUtFuQ" key="presenceCondition" value=""/>
+ <type href="Java.ecore#//Class/methods"/>
+ </edges>
+ <edges xmi:id="_ggCBAyT1EeqBU_anwUtFuQ" source="_Z6vIFCT1EeqBU_anwUtFuQ" target="_ggCBACT1EeqBU_anwUtFuQ">
+ <type href="Java.ecore#//Class/fields"/>
+ </edges>
+ </rhs>
+ <mappings xmi:id="_Z6vIHiT1EeqBU_anwUtFuQ" origin="_Z6vIBST1EeqBU_anwUtFuQ" image="_Z6vIFCT1EeqBU_anwUtFuQ"/>
+ <mappings xmi:id="_Z6vIHyT1EeqBU_anwUtFuQ" origin="_Z6vIByT1EeqBU_anwUtFuQ" image="_Z6vIFiT1EeqBU_anwUtFuQ"/>
+ <mappings xmi:id="_ggCBAiT1EeqBU_anwUtFuQ" origin="_Z6vICST1EeqBU_anwUtFuQ" image="_ggCBACT1EeqBU_anwUtFuQ"/>
+ </units>
</henshin:Module>
diff --git a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin_diagram b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin_diagram
index 7dc3043..5df5578 100644
--- a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin_diagram
+++ b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.henshin_diagram
@@ -34,7 +34,7 @@
<styles xmi:type="notation:FilteringStyle" xmi:id="_pO7j1BG6Eeqxptn-OOol6g"/>
</children>
<element xmi:type="henshin:Node" href="vb.henshin#_pOdpwBG6Eeqxptn-OOol6g"/>
- <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pO68wRG6Eeqxptn-OOol6g" x="229" y="100"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_pO68wRG6Eeqxptn-OOol6g" x="296" y="95"/>
</children>
<children xmi:type="notation:Shape" xmi:id="_wMlScBG6Eeqxptn-OOol6g" type="3001" fontName="Ubuntu">
<children xmi:type="notation:DecorationNode" xmi:id="_wMl5gBG6Eeqxptn-OOol6g" type="5002"/>
@@ -44,46 +44,419 @@
<styles xmi:type="notation:FilteringStyle" xmi:id="_wMl5hBG6Eeqxptn-OOol6g"/>
</children>
<element xmi:type="henshin:Node" href="vb.henshin#_wMfL0BG6Eeqxptn-OOol6g"/>
- <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wMlScRG6Eeqxptn-OOol6g" x="123" y="184"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_wMlScRG6Eeqxptn-OOol6g" x="158" y="100"/>
</children>
</children>
<element xmi:type="henshin:Rule" href="vb.henshin#_FRXFYBBeEeqGYoBEYurJJg"/>
- <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FRaIsRBeEeqGYoBEYurJJg" x="210" y="84" width="392" height="290"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_FRaIsRBeEeqGYoBEYurJJg" x="41" y="30" width="392" height="196"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0rUycCTxEeqQuPO741JcQw" type="2001" fontName="Ubuntu" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_0rUycSTxEeqQuPO741JcQw" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_0rUyciTxEeqQuPO741JcQw" key="value" value="create"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUycyTxEeqQuPO741JcQw" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUydCTxEeqQuPO741JcQw" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_0rUydSTxEeqQuPO741JcQw" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUydiTxEeqQuPO741JcQw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUydyTxEeqQuPO741JcQw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyeCTxEeqQuPO741JcQw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0rUyeSTxEeqQuPO741JcQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0rUyeiTxEeqQuPO741JcQw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_0rWAlSTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0rUyeyTxEeqQuPO741JcQw" x="118" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0rUyfCTxEeqQuPO741JcQw" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyfSTxEeqQuPO741JcQw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyfiTxEeqQuPO741JcQw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyfyTxEeqQuPO741JcQw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0rUygCTxEeqQuPO741JcQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0rUygSTxEeqQuPO741JcQw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_0rWAlyTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0rUygiTxEeqQuPO741JcQw" x="26" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0rUygyTxEeqQuPO741JcQw" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyhCTxEeqQuPO741JcQw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyhSTxEeqQuPO741JcQw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyhiTxEeqQuPO741JcQw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0rUyhyTxEeqQuPO741JcQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0rUyiCTxEeqQuPO741JcQw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_0rWAmSTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0rUyiSTxEeqQuPO741JcQw" x="286" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_0rUyiiTxEeqQuPO741JcQw" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyiyTxEeqQuPO741JcQw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyjCTxEeqQuPO741JcQw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_0rUyjSTxEeqQuPO741JcQw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_0rUyjiTxEeqQuPO741JcQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_0rUyjyTxEeqQuPO741JcQw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_0rWAmyTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0rUykCTxEeqQuPO741JcQw" x="158" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_7ubo0CTxEeqQuPO741JcQw" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_7ucP4CTxEeqQuPO741JcQw" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7ucP4STxEeqQuPO741JcQw" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_7ucP4iTxEeqQuPO741JcQw" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_7ucP4yTxEeqQuPO741JcQw"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_7ucP5CTxEeqQuPO741JcQw"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_7tIoUCTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_7ubo0STxEeqQuPO741JcQw" x="310" y="90"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="vb.henshin#_0rWAkCTxEeqQuPO741JcQw"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_0rUykSTxEeqQuPO741JcQw" x="477" y="235" width="392" height="196"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_52xuMCTyEeqmvcN2WI4rvQ" type="2001" fontName="Ubuntu" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_52xuMSTyEeqmvcN2WI4rvQ" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_52xuMiTyEeqmvcN2WI4rvQ" key="value" value="create"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuMyTyEeqmvcN2WI4rvQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuNCTyEeqmvcN2WI4rvQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_52xuNSTyEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuNiTyEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuNyTyEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuOCTyEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_52xuOSTyEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_52xuOiTyEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_52y8VSTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuOyTyEeqmvcN2WI4rvQ" x="118" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_52xuPCTyEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuPSTyEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuPiTyEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuPyTyEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_52xuQCTyEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_52xuQSTyEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_52y8VyTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuQiTyEeqmvcN2WI4rvQ" x="26" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_52xuQyTyEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuRCTyEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuRSTyEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuRiTyEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_52xuRyTyEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_52xuSCTyEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_52y8WSTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuSSTyEeqmvcN2WI4rvQ" x="286" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_52xuSiTyEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuSyTyEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuTCTyEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuTSTyEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_52xuTiTyEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_52xuTyTyEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_52y8WyTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuUCTyEeqmvcN2WI4rvQ" x="158" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_52xuUSTyEeqmvcN2WI4rvQ" type="3001" fontName="Segoe UI">
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuUiTyEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuUyTyEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_52xuVCTyEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_52xuVSTyEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_52xuViTyEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_52y8bCTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuVyTyEeqmvcN2WI4rvQ" x="310" y="90"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="vb.henshin#_52y8UCTyEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_52xuWCTyEeqmvcN2WI4rvQ" x="477" y="30" width="392" height="196"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_SrZeYCTzEeqmvcN2WI4rvQ" type="2001" fontName="Ubuntu" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_SrZeYSTzEeqmvcN2WI4rvQ" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_SrZeYiTzEeqmvcN2WI4rvQ" key="value" value="delete"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeYyTzEeqmvcN2WI4rvQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeZCTzEeqmvcN2WI4rvQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_SrZeZSTzEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeZiTzEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeZyTzEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeaCTzEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_SrZeaSTzEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_SrZeaiTzEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_SrashSTzEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SrZeayTzEeqmvcN2WI4rvQ" x="118" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_SrZebCTzEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZebSTzEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZebiTzEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZebyTzEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_SrZecCTzEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_SrZecSTzEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_SrashyTzEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SrZeciTzEeqmvcN2WI4rvQ" x="26" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_SrZecyTzEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZedCTzEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZedSTzEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZediTzEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_SrZedyTzEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_SrZeeCTzEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_SrasiSTzEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SrZeeSTzEeqmvcN2WI4rvQ" x="296" y="95"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_SrZeeiTzEeqmvcN2WI4rvQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZeeyTzEeqmvcN2WI4rvQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZefCTzEeqmvcN2WI4rvQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrZefSTzEeqmvcN2WI4rvQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_SrZefiTzEeqmvcN2WI4rvQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_SrZefyTzEeqmvcN2WI4rvQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_SrasiyTzEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SrZegCTzEeqmvcN2WI4rvQ" x="158" y="100"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="vb.henshin#_SrasgCTzEeqmvcN2WI4rvQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_SrZegSTzEeqmvcN2WI4rvQ" x="41" y="230" width="392" height="196"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Z6sEsCT1EeqBU_anwUtFuQ" type="2001" fontName="Ubuntu" italic="true" lineColor="0">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_Z6srwCT1EeqBU_anwUtFuQ" source="defaultAction">
+ <details xmi:type="ecore:EStringToStringMapEntry" xmi:id="_Z6srwST1EeqBU_anwUtFuQ" key="value" value="delete"/>
+ </eAnnotations>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srwiT1EeqBU_anwUtFuQ" type="5001"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srwyT1EeqBU_anwUtFuQ" type="7001">
+ <children xmi:type="notation:Shape" xmi:id="_Z6srxCT1EeqBU_anwUtFuQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srxST1EeqBU_anwUtFuQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srxiT1EeqBU_anwUtFuQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srxyT1EeqBU_anwUtFuQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Z6sryCT1EeqBU_anwUtFuQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Z6sryST1EeqBU_anwUtFuQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_Z6vIBST1EeqBU_anwUtFuQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z6sryiT1EeqBU_anwUtFuQ" x="118" y="5"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Z6sryyT1EeqBU_anwUtFuQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srzCT1EeqBU_anwUtFuQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srzST1EeqBU_anwUtFuQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6srziT1EeqBU_anwUtFuQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Z6srzyT1EeqBU_anwUtFuQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Z6sr0CT1EeqBU_anwUtFuQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_Z6vIByT1EeqBU_anwUtFuQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z6sr0ST1EeqBU_anwUtFuQ" x="26" y="100"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Z6sr0iT1EeqBU_anwUtFuQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr0yT1EeqBU_anwUtFuQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr1CT1EeqBU_anwUtFuQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr1ST1EeqBU_anwUtFuQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Z6sr1iT1EeqBU_anwUtFuQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Z6sr1yT1EeqBU_anwUtFuQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_Z6vICST1EeqBU_anwUtFuQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z6sr2CT1EeqBU_anwUtFuQ" x="296" y="95"/>
+ </children>
+ <children xmi:type="notation:Shape" xmi:id="_Z6sr2ST1EeqBU_anwUtFuQ" type="3001" fontName="Ubuntu">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr2iT1EeqBU_anwUtFuQ" type="5002"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr2yT1EeqBU_anwUtFuQ" type="5003"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z6sr3CT1EeqBU_anwUtFuQ" type="7002">
+ <styles xmi:type="notation:SortingStyle" xmi:id="_Z6sr3ST1EeqBU_anwUtFuQ"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_Z6sr3iT1EeqBU_anwUtFuQ"/>
+ </children>
+ <element xmi:type="henshin:Node" href="vb.henshin#_Z6vICyT1EeqBU_anwUtFuQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z6sr3yT1EeqBU_anwUtFuQ" x="158" y="100"/>
+ </children>
+ </children>
+ <element xmi:type="henshin:Rule" href="vb.henshin#_Z6vIACT1EeqBU_anwUtFuQ"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Z6sr4CT1EeqBU_anwUtFuQ" x="35" y="439" width="392" height="196"/>
</children>
<styles xmi:type="notation:DiagramStyle" xmi:id="_EMnq4RBeEeqGYoBEYurJJg"/>
<element xmi:type="henshin:Module" href="vb.henshin#_EMSTsBBeEeqGYoBEYurJJg"/>
- <edges xmi:type="notation:Connector" xmi:id="_IormgBBeEeqGYoBEYurJJg" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_H0IkIBBeEeqGYoBEYurJJg">
- <children xmi:type="notation:DecorationNode" xmi:id="_Ios0oBBeEeqGYoBEYurJJg" type="6001">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_Ios0oRBeEeqGYoBEYurJJg" x="55" y="33"/>
+ <edges xmi:type="notation:Connector" xmi:id="_53I6kCTyEeqmvcN2WI4rvQ" type="4001" source="_0rUydSTxEeqQuPO741JcQw" target="_0rUyfCTxEeqQuPO741JcQw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53I6kyTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KIsCTyEeqmvcN2WI4rvQ" y="40"/>
</children>
- <children xmi:type="notation:DecorationNode" xmi:id="_IotbsBBeEeqGYoBEYurJJg" type="6002">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_IotbsRBeEeqGYoBEYurJJg" x="55" y="-38"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53KIsSTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KIsiTyEeqmvcN2WI4rvQ" y="60"/>
</children>
- <styles xmi:type="notation:FontStyle" xmi:id="_IormgRBeEeqGYoBEYurJJg" fontName="Ubuntu"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53I6kSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_0rWAnSTxEeqQuPO741JcQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53I6kiTyEeqmvcN2WI4rvQ" points="[-21, 21, 71, -74]$[-72, 74, 20, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53KvwCTyEeqmvcN2WI4rvQ" type="4001" source="_0rUydSTxEeqQuPO741JcQw" target="_0rUygyTxEeqQuPO741JcQw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53KvwyTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KvxCTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53KvxSTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KvxiTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53KvwSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_0rWAnyTxEeqQuPO741JcQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53KvwiTyEeqmvcN2WI4rvQ" points="[33, 0, -135, 0]$[135, 0, -33, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53KvxyTyEeqmvcN2WI4rvQ" type="4001" source="_0rUydSTxEeqQuPO741JcQw" target="_0rUyiiTxEeqQuPO741JcQw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53KvyiTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KvyyTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53KvzCTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53KvzSTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53KvyCTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_0rWAoSTxEeqQuPO741JcQw"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53KvySTyEeqmvcN2WI4rvQ" points="[8, 21, -32, -74]$[31, 74, -9, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53NMACTyEeqmvcN2WI4rvQ" type="4001" source="_0rUyiiTxEeqQuPO741JcQw" target="_7ubo0CTxEeqQuPO741JcQw">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53NMAyTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53NMBCTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53NMBSTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53NMBiTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53NMASTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_akKm4CTyEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53NMAiTyEeqmvcN2WI4rvQ" points="[33, -3, -119, 7]$[119, -8, -33, 2]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53PBMCTyEeqmvcN2WI4rvQ" type="4001" source="_52xuNSTyEeqmvcN2WI4rvQ" target="_52xuPCTyEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53PoQCTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53PoQSTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53PoQiTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53PoQyTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53PBMSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_52y8XSTyEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53PBMiTyEeqmvcN2WI4rvQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53Q2YCTyEeqmvcN2WI4rvQ" type="4001" source="_52xuNSTyEeqmvcN2WI4rvQ" target="_52xuQyTyEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53Q2YyTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53Q2ZCTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53Q2ZSTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53Q2ZiTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53Q2YSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_52y8XyTyEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53Q2YiTyEeqmvcN2WI4rvQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53SrkCTyEeqmvcN2WI4rvQ" type="4001" source="_52xuNSTyEeqmvcN2WI4rvQ" target="_52xuSiTyEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53TSoCTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53TSoSTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53TSoiTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53TSoyTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53SrkSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_52y8YSTyEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53SrkiTyEeqmvcN2WI4rvQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_53T5sCTyEeqmvcN2WI4rvQ" type="4001" source="_52xuSiTyEeqmvcN2WI4rvQ" target="_52xuUSTyEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_53T5syTyEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53UgwCTyEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_53UgwSTyEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_53UgwiTyEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_53T5sSTyEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_52y8dCTyEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_53T5siTyEeqmvcN2WI4rvQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_SrmSsCTzEeqmvcN2WI4rvQ" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_H0IkIBBeEeqGYoBEYurJJg">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrmSsyTzEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_SrmStCTzEeqmvcN2WI4rvQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SrmStSTzEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_SrmStiTzEeqmvcN2WI4rvQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_SrmSsSTzEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
<element xmi:type="henshin:Edge" href="vb.henshin#_IognYBBeEeqGYoBEYurJJg"/>
- <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_IormghBeEeqGYoBEYurJJg" points="[-32, 0, 60, -95]$[-92, 0, 0, -95]$[-92, 74, 0, -21]"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SrmSsiTzEeqmvcN2WI4rvQ" points="[-21, 21, 71, -74]$[-72, 74, 20, -21]"/>
</edges>
- <edges xmi:type="notation:Connector" xmi:id="_q4woYBG6Eeqxptn-OOol6g" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_pO68wBG6Eeqxptn-OOol6g">
- <children xmi:type="notation:DecorationNode" xmi:id="_q4050BG6Eeqxptn-OOol6g" type="6001">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_q4050RG6Eeqxptn-OOol6g" x="33" y="63"/>
+ <edges xmi:type="notation:Connector" xmi:id="_Srm5wCTzEeqmvcN2WI4rvQ" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_pO68wBG6Eeqxptn-OOol6g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Srm5wyTzEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Srm5xCTzEeqmvcN2WI4rvQ" x="30" y="-33"/>
</children>
- <children xmi:type="notation:DecorationNode" xmi:id="_q4050hG6Eeqxptn-OOol6g" type="6002">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_q4050xG6Eeqxptn-OOol6g" x="-38" y="62"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Srng0CTzEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_SroH4CTzEeqmvcN2WI4rvQ" x="11" y="-39"/>
</children>
- <styles xmi:type="notation:FontStyle" xmi:id="_q4woYRG6Eeqxptn-OOol6g" fontName="Ubuntu"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Srm5wSTzEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
<element xmi:type="henshin:Edge" href="vb.henshin#_q4RgMBG6Eeqxptn-OOol6g"/>
- <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q4woYhG6Eeqxptn-OOol6g" points="[10, 0, -78, -96]$[88, 0, 0, -96]$[88, 75, 0, -21]"/>
- <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_q4-DwBG6Eeqxptn-OOol6g" id="(0.8461538461538461,0.47619047619047616)"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Srm5wiTzEeqmvcN2WI4rvQ" points="[33, 16, -145, -74]$[145, 73, -33, -17]"/>
</edges>
- <edges xmi:type="notation:Connector" xmi:id="_xlV1IBG6Eeqxptn-OOol6g" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_wMlScBG6Eeqxptn-OOol6g">
- <children xmi:type="notation:DecorationNode" xmi:id="_xlWcMBG6Eeqxptn-OOol6g" type="6001">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_xlWcMRG6Eeqxptn-OOol6g" x="54" y="-31"/>
+ <edges xmi:type="notation:Connector" xmi:id="_SroH4STzEeqmvcN2WI4rvQ" type="4001" source="_HA-B0BBeEeqGYoBEYurJJg" target="_wMlScBG6Eeqxptn-OOol6g">
+ <children xmi:type="notation:DecorationNode" xmi:id="_SroH5CTzEeqmvcN2WI4rvQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_SroH5STzEeqmvcN2WI4rvQ" y="40"/>
</children>
- <children xmi:type="notation:DecorationNode" xmi:id="_xlWcMhG6Eeqxptn-OOol6g" type="6002">
- <layoutConstraint xmi:type="notation:Location" xmi:id="_xlWcMxG6Eeqxptn-OOol6g" x="53" y="35"/>
+ <children xmi:type="notation:DecorationNode" xmi:id="_SroH5iTzEeqmvcN2WI4rvQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_SroH5yTzEeqmvcN2WI4rvQ" y="60"/>
</children>
- <styles xmi:type="notation:FontStyle" xmi:id="_xlV1IRG6Eeqxptn-OOol6g" fontName="Ubuntu"/>
+ <styles xmi:type="notation:FontStyle" xmi:id="_SroH4iTzEeqmvcN2WI4rvQ" fontName="Segoe UI"/>
<element xmi:type="henshin:Edge" href="vb.henshin#_xlRjsBG6Eeqxptn-OOol6g"/>
- <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_xlV1IhG6Eeqxptn-OOol6g" points="[6, 21, -37, -134]$[42, 134, -1, -21]"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_SroH4yTzEeqmvcN2WI4rvQ" points="[8, 21, -32, -74]$[31, 74, -9, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7YBMCT1EeqBU_anwUtFuQ" type="4001" source="_SrZeZSTzEeqmvcN2WI4rvQ" target="_SrZebCTzEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7YoQCT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7YoQST1EeqBU_anwUtFuQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7YoQiT1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7YoQyT1EeqBU_anwUtFuQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7YBMST1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_SrasjSTzEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7YBMiT1EeqBU_anwUtFuQ" points="[-21, 21, 71, -74]$[-72, 74, 20, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7Z2YCT1EeqBU_anwUtFuQ" type="4001" source="_SrZeZSTzEeqmvcN2WI4rvQ" target="_SrZecyTzEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7adcCT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7adcST1EeqBU_anwUtFuQ" x="21" y="-22"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7adciT1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7adcyT1EeqBU_anwUtFuQ" x="13" y="-44"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7Z2YST1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_SrasjyTzEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7Z2YiT1EeqBU_anwUtFuQ" points="[33, 17, -138, -73]$[145, 76, -26, -14]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7addCT1EeqBU_anwUtFuQ" type="4001" source="_SrZeZSTzEeqmvcN2WI4rvQ" target="_SrZeeiTzEeqmvcN2WI4rvQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7addyT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7adeCT1EeqBU_anwUtFuQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7adeST1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7adeiT1EeqBU_anwUtFuQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7addST1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_SraskSTzEeqmvcN2WI4rvQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7addiT1EeqBU_anwUtFuQ" points="[8, 21, -32, -74]$[31, 74, -9, -21]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7cSoCT1EeqBU_anwUtFuQ" type="4001" source="_Z6srxCT1EeqBU_anwUtFuQ" target="_Z6sryyT1EeqBU_anwUtFuQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7c5sCT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7c5sST1EeqBU_anwUtFuQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7c5siT1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7c5syT1EeqBU_anwUtFuQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7cSoST1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_Z6vIDST1EeqBU_anwUtFuQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7cSoiT1EeqBU_anwUtFuQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7dgwCT1EeqBU_anwUtFuQ" type="4001" source="_Z6srxCT1EeqBU_anwUtFuQ" target="_Z6sr0iT1EeqBU_anwUtFuQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7dgwyT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7eH0CT1EeqBU_anwUtFuQ" x="31" y="-38"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7eH0ST1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7eH0iT1EeqBU_anwUtFuQ" x="21" y="-56"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7dgwST1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_Z6vIDyT1EeqBU_anwUtFuQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7dgwiT1EeqBU_anwUtFuQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
+ </edges>
+ <edges xmi:type="notation:Connector" xmi:id="_Z7eH0yT1EeqBU_anwUtFuQ" type="4001" source="_Z6srxCT1EeqBU_anwUtFuQ" target="_Z6sr2ST1EeqBU_anwUtFuQ">
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7eH1iT1EeqBU_anwUtFuQ" type="6001">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7eH1yT1EeqBU_anwUtFuQ" y="40"/>
+ </children>
+ <children xmi:type="notation:DecorationNode" xmi:id="_Z7eH2CT1EeqBU_anwUtFuQ" type="6002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_Z7eH2ST1EeqBU_anwUtFuQ" y="60"/>
+ </children>
+ <styles xmi:type="notation:FontStyle" xmi:id="_Z7eH1CT1EeqBU_anwUtFuQ" fontName="Segoe UI"/>
+ <element xmi:type="henshin:Edge" href="vb.henshin#_Z6vIEST1EeqBU_anwUtFuQ"/>
+ <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Z7eH1ST1EeqBU_anwUtFuQ" points="[0, 0, 0, 0]$[0, 0, 0, 0]"/>
</edges>
</notation:Diagram>
diff --git a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.json b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.json
index b35f93f..44af035 100644
--- a/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.json
+++ b/plugins/org.eclipse.emf.henshin.variability.test/data/java/vb.json
@@ -11,7 +11,49 @@
},
{
"kind": "MATCHES",
- "value": 3
+ "value": 7
+ }
+ ]
+ },
+ {
+ "rule": "create1",
+ "model": "model1.xmi",
+ "results": [
+ {
+ "kind": "MODEL_SIZE",
+ "value": 14
+ },
+ {
+ "kind": "MATCHES",
+ "value": 7
+ }
+ ]
+ },
+ {
+ "rule": "create2",
+ "model": "model1.xmi",
+ "results": [
+ {
+ "kind": "MODEL_SIZE",
+ "value": 18
+ },
+ {
+ "kind": "MATCHES",
+ "value": 7
+ }
+ ]
+ },
+ {
+ "rule": "delete2",
+ "model": "model1.xmi",
+ "results": [
+ {
+ "kind": "MODEL_SIZE",
+ "value": 6
+ },
+ {
+ "kind": "MATCHES",
+ "value": 7
}
]
}
diff --git a/plugins/org.eclipse.emf.henshin.variability.test/tests/org/eclipse/emf/henshin/variability/test/VBEngineParameterizedTest.java b/plugins/org.eclipse.emf.henshin.variability.test/tests/org/eclipse/emf/henshin/variability/test/VBEngineParameterizedTest.java
index 672bfb1..5dee9c2 100644
--- a/plugins/org.eclipse.emf.henshin.variability.test/tests/org/eclipse/emf/henshin/variability/test/VBEngineParameterizedTest.java
+++ b/plugins/org.eclipse.emf.henshin.variability.test/tests/org/eclipse/emf/henshin/variability/test/VBEngineParameterizedTest.java
@@ -34,6 +34,7 @@
import org.eclipse.emf.henshin.model.Rule;
import org.eclipse.emf.henshin.model.resource.HenshinResourceSet;
import org.eclipse.emf.henshin.variability.InconsistentRuleException;
+import org.eclipse.emf.henshin.variability.VarRuleApplicationImpl;
import org.eclipse.emf.henshin.variability.matcher.VariabilityAwareEngine;
import org.eclipse.emf.henshin.variability.matcher.VariabilityAwareMatch;
import org.eclipse.emf.henshin.variability.util.RuleUtil;
@@ -168,10 +169,8 @@
VariabilityAwareEngine vbEngine = new VariabilityAwareEngine(data.rule, graph);
Set<VariabilityAwareMatch> matches = vbEngine.findMatches();
int numberOfMatches = matches.size();
-
- EngineImpl engine = new EngineImpl();
for (VariabilityAwareMatch completeVarMatch : matches) {
- applyMatch(graph, engine, completeVarMatch);
+ applyRuleAtMatch(graph, vbEngine, completeVarMatch);
}
if (DEBUG) {
Path path = Paths.get("debug/" + data.resource.getURI().lastSegment());
@@ -204,19 +203,22 @@
* @param engine The engine
* @param match The VB match to be applied
*/
- private void applyMatch(EGraphImpl graph, EngineImpl engine, VariabilityAwareMatch match) {
- Match completeMatch = match.getMatch();
- Rule unit = match.getMatch().getRule();
- match.prepareRule();
- MatchImpl resultMatch = new MatchImpl((Rule) unit, true);
- Change change = engine.createChange((Rule) unit, graph, completeMatch, resultMatch);
- if (change == null) {
- fail("Creating change failed!");
- }
- change.applyAndReverse();
- if (match != null) {
- match.undoPreparation();
- }
+ private void applyRuleAtMatch(EGraphImpl graph, VariabilityAwareEngine engine, VariabilityAwareMatch match) {
+ VarRuleApplicationImpl app = new VarRuleApplicationImpl(new EngineImpl(), graph, match.getRule(), match);
+ app.execute(null);
+
+// Match completeMatch = match.getMatch();
+// Rule unit = match.getMatch().getRule();
+// match.prepareRule();
+// MatchImpl resultMatch = new MatchImpl((Rule) unit, true);
+// Change change = engine.createChange((Rule) unit, graph, completeMatch, resultMatch);
+// if (change == null) {
+// fail("Creating change failed!");
+// }
+// change.applyAndReverse();
+// if (match != null) {
+// match.undoPreparation();
+// }
}
/**
diff --git a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/VarRuleApplicationImpl.java b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/VarRuleApplicationImpl.java
index d18705d..890e7d3 100644
--- a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/VarRuleApplicationImpl.java
+++ b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/VarRuleApplicationImpl.java
@@ -21,12 +21,17 @@
* @author Sven Peldszus
*/
public class VarRuleApplicationImpl extends RuleApplicationImpl {
+ VariabilityAwareMatch completeVarMatch;
- public VarRuleApplicationImpl(Engine engine, EGraph graph, Rule rule,
- Assignment partialMatch) {
+ public VarRuleApplicationImpl(Engine engine, EGraph graph, Rule rule, Assignment partialMatch) {
super(engine, graph, rule, partialMatch);
}
+ public VarRuleApplicationImpl(Engine engine, EGraph graph, Rule rule, VariabilityAwareMatch completeMatchVar) {
+ super(engine, graph, rule, null);
+ this.completeVarMatch = completeMatchVar;
+ }
+
public VarRuleApplicationImpl(Engine engine) {
super(engine);
}
@@ -34,8 +39,7 @@
/*
* (non-Javadoc)
*
- * @see
- * org.eclipse.emf.henshin.interpreter.UnitApplication#execute(org.eclipse
+ * @see org.eclipse.emf.henshin.interpreter.UnitApplication#execute(org.eclipse
* .emf.henshin.interpreter.ApplicationMonitor)
*/
@Override
@@ -56,50 +60,47 @@
resultMatch = null;
}
// Do we need to derive a complete match?
- long startTime = System.currentTimeMillis();
- VariabilityAwareMatch completeMatchVar = null;
- if (completeMatch == null) {
- if (!RuleUtil.isVarRule(unit)) {
- completeMatch = engine
- .findMatches((Rule) unit, graph, partialMatch)
- .iterator().next();
- } else {
- VariabilityAwareEngine vbEngine;
- try {
- vbEngine = new VariabilityAwareEngine(
- (Rule) unit, graph);
- } catch (InconsistentRuleException e) {
- return false;
- }
- Set<VariabilityAwareMatch> matches = vbEngine.findMatches();
- if (!matches.isEmpty()) {
- completeMatchVar = (VariabilityAwareMatch) matches
- .iterator().next();
- completeMatch = completeMatchVar.getMatch();
- unit = completeMatchVar.getMatch().getRule();
+
+ if (completeVarMatch != null) {
+ completeMatch = completeVarMatch.getMatch();
+ } else {
+ long startTime = System.currentTimeMillis();
+
+ if (completeMatch == null) {
+ if (!RuleUtil.isVarRule(unit)) {
+ completeMatch = engine.findMatches((Rule) unit, graph, partialMatch).iterator().next();
+ } else {
+ VariabilityAwareEngine vbEngine;
+ try {
+ vbEngine = new VariabilityAwareEngine((Rule) unit, graph);
+ } catch (InconsistentRuleException e) {
+ return false;
+ }
+ Set<VariabilityAwareMatch> matches = vbEngine.findMatches();
+ if (!matches.isEmpty()) {
+ completeVarMatch = (VariabilityAwareMatch) matches.iterator().next();
+ completeMatch = completeVarMatch.getMatch();
+ unit = completeVarMatch.getMatch().getRule();
+
+ }
}
-
+ isCompleteMatchDerived = true;
}
- isCompleteMatchDerived = true;
- }
- long runtime = (System.currentTimeMillis() - startTime);
- MatchingLog.getEntries().add(
- new MatchingLogEntry(unit, completeMatch != null, runtime,
- graph.size(), 0)); // InterpreterUtil.countEdges(graph)));
- if (completeMatch == null) {
- if (monitor != null) {
- monitor.notifyExecute(this, false);
+ long runtime = (System.currentTimeMillis() - startTime);
+ MatchingLog.getEntries().add(new MatchingLogEntry(unit, completeMatch != null, runtime, graph.size(), 0)); // InterpreterUtil.countEdges(graph)));
+ if (completeMatch == null) {
+ if (monitor != null) {
+ monitor.notifyExecute(this, false);
+ }
+ return false;
}
- return false;
}
- Rule rule = null;
- if (completeMatchVar != null) {
- completeMatchVar.prepareRule();
- }
+ if (completeVarMatch != null) {
+ completeVarMatch.prepareRule();
+ }
resultMatch = new MatchImpl((Rule) unit, true);
- change = engine.createChange((Rule) unit, graph, completeMatch,
- resultMatch);
+ change = engine.createChange((Rule) unit, graph, completeMatch, resultMatch);
if (change == null) {
if (monitor != null) {
monitor.notifyExecute(this, false);
@@ -110,9 +111,10 @@
isExecuted = true;
if (monitor != null) {
monitor.notifyExecute(this, true);
- } if (completeMatchVar != null) {
- completeMatchVar.undoPreparation();
- }
+ }
+ if (completeVarMatch != null) {
+ completeVarMatch.undoPreparation();
+ }
return true;
}
diff --git a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/RulePreparator.java b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/RulePreparator.java
index 9b19ea0..580e131 100644
--- a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/RulePreparator.java
+++ b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/RulePreparator.java
@@ -27,6 +27,7 @@
import org.eclipse.emf.henshin.variability.matcher.VariabilityAwareEngine.RuleInfo;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityFactory;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityGraphElement;
+import org.eclipse.emf.henshin.variability.wrapper.VariabilityNode;
import aima.core.logic.propositional.parsing.ast.Sentence;
@@ -65,7 +66,8 @@
this.rule = rule;
this.checkDangling = rule.isCheckDangling();
}
-
+
+
/**
* Prepares the rule for variability-based merging and rule application:
* rejected elements and removed and the "injective" flag is set. Assumes
@@ -284,8 +286,6 @@
private void determineRemoverOrder(And and, Set<Formula> formulas, EObject container,
EReference feature) {
- if (rule.getName().contains("tr_E_10_argument"))
- System.out.println();
if (formulas.contains(and.getLeft())
&& formulas.contains(and.getRight())) {
removeFormulaContainingRef.put(and, feature);
diff --git a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareEngine.java b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareEngine.java
index 2e03789..189781b 100644
--- a/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareEngine.java
+++ b/plugins/org.eclipse.emf.henshin.variability/src/org/eclipse/emf/henshin/variability/matcher/VariabilityAwareEngine.java
@@ -26,6 +26,7 @@
import org.eclipse.emf.henshin.variability.util.RuleUtil;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityFactory;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityGraphElement;
+import org.eclipse.emf.henshin.variability.wrapper.VariabilityNode;
import org.eclipse.emf.henshin.variability.wrapper.VariabilityRule;
import aima.core.logic.propositional.parsing.ast.Sentence;
@@ -71,6 +72,7 @@
*/
public VariabilityAwareEngine(Rule rule, EGraph graph) throws InconsistentRuleException {
super();
+ fixInconsistencies(rule);
if(!RuleUtil.checkRule(rule)) {
throw new InconsistentRuleException();
}
@@ -85,6 +87,20 @@
populateExpressionMap();
}
+ private void fixInconsistencies(Rule rule) {
+ // Per definition, mapped nodes must have the same presence condition
+ // in the LHS and the RHS.
+ for (Mapping mapping : rule.getMappings()) {
+
+ VariabilityNode origin = VariabilityFactory.createVariabilityNode(mapping.getOrigin());
+ VariabilityNode image = VariabilityFactory.createVariabilityNode(mapping.getImage());
+
+ if (origin.getPresenceCondition() != image.getPresenceCondition()) {
+ image.setPresenceCondition(origin.getPresenceCondition());
+ }
+ }
+ }
+
private void populateExpressionMap() {
if (ruleInfoRegistry.containsKey(rule)) {
expressions = ruleInfo.getExpressions();