Hi Daniel,
Thanks for your comments on Kinga's question. Can I just clarify
your thoughts on the following question:
We were unsure whether this was something to do with us
misunderstanding something about how Henshin works (in particular,
in relation to multi-nodes, which were present in the rules where
the problem first occurred) or whether this might actually be a
bug in Henshin. What is your view on this?
Many thanks,
Steffen
On 23/06/2017 13:09, Bojarczuk, Kinga
wrote:
|
This sender failed our fraud detection checks and may not be who they appear to be. Learn about spoofing |
Feedback |
Yes that's correct and I was thinking the same that it
seems odd. I can use rule 'Third' but I'd still like to know
why the other one doesn't work so if you come up with
anything please let me know.
Thank you,
Kinga
So your rule "Third" works on set-up (2), while rule
"First" does not - OK, that's really odd, and I don't have any
further ideas for the moment.
For all practical purposes, I can encourage you to simply use
rule "Third" instead "First": Removing an object from its
container object basically has the same effect as deleting it
altogether. (One needs to be careful with other elements
referencing the element-to-deleted, though.)
Best regards,
Daniel
Am 23.06.2017 um 13:48 schrieb
Bojarczuk, Kinga:
Yes you are correct but again as I said if you run the
'Third' rule on the behavior file it accepts it/finds a
match so it does accept two layers of cross-referencing
in the interpreter wizard. And I have applied the rule
programmatically(as I said in the previous email) and it
doesn't work either but I am 100% sure the set up is
correct because I have been working on other rules that
work and they run just fine in both the wizard and
through Java -> as does rule 'Third'.
Hi Kinga,
to summarize, there are two different model set-ups:
(1) server2.gcs -> server2.ecore
(2) server3.behavior -> server2.gcs -> server2.ecore
Using the interpreter wizard, your rule works when apply
it to (1), and does not work when you apply it to (2).
Right?
Then it could still be an issue with the interpreter
wizard, but a more subtle one: the wizard can deal with
one layer of cross-referencing, but not with two or more
ones.
Can you try the following: Apply the rule programmatically
to set-up (2). But before you apply the rule, make sure to
load all three models and add them to the same input
EGraph.
Best regards,
Daniel
Am 23.06.2017 um 13:29
schrieb Bojarczuk, Kinga:
I'm sorry I think I'm just very bad at explaining
and wasn't precise enough. I've been running a few
other examples already and I run it through a Java
class as you said but the transformation wizard
still accepts them as there is a match so it just
doesn't change anything after it runs. I didn't
include it because the output doesn't matter for
me it's just finding a match that matters so the
transformation wizard is enough. And the java
class doesn't find a match either because if it
was there then 'apply transformation' would work
instead of giving an error, it just wouldn't
change anything as it only makes changes in the
behavior file.
So my problem is that the rule is correct but for
some reason running it from the behavior file
doesn't find a match (neither in editor nor the
Java class) but it should because it exists and
the connections ( :Behavior -> :MetamodelGD
-> :PackageGD) are correct because as I said
the 'Third' rule works. So my problem is why
doesn't it find a match for the 'First' rule
-> deleting :EReference node when running it on
the behavior file while it finds it when running
on the ecore/gcs files (through both
transformation wizard and java).
I've enclosed a screenshot which shows a rule that
runs on server2.gcs(which references
server2.ecore) file and finds a match. But after
adding :Behavior node at the front and running it
on server3.behavior it doesn't find it anymore
-> which is my problem from the beginning as it
should find that match as it does the same it just
references it through the behavior file so I don't
understand why it doesn't.
Thank you,
Kinga
Hi Kinga,
Am 23.06.2017 um 12:39
schrieb Bojarczuk, Kinga:
Sorry bad-wording by the code I just meant
running the transformation just by 'apply
transformation' on the files. I just want it to
find a match.
Ah, I see. Then the actual issue is as follows: The
transformation wizard (which is executed by "apply
transformation") currently does not account for
references between models. In other works, it only
supports "self-contained" models which do not depend
on other models. This could be considered a bug, so I
will create a corresponding entry in our BugZilla.
In the meantime, you can run the transformation
programmatically by using the API (see [1] for an
example). There, dealing with references between
models is simple: Just add all involved models to the
same input EGraph.
[1] http://git.eclipse.org/c/henshin/org.eclipse.emft.henshin.git/tree/plugins/org.eclipse.emf.henshin.examples/src/org/eclipse/emf/henshin/examples/bank/BankExample.java
I cannot anyhow specify that containment edge
between EReference and EPackage in the Henshin
editor, it doesnt let me connect them. And if
that was the problem then why does it find a
match in the ecore file but not in the behavior
file?
Indeed, I now notice that my earlier interpretation
was wrong: EReferences are contained in EClasses (and
not in than EPackages). So the rule as it is should be
correct.
Because my main problem is that it works/finds
a match when run on the server2.ecore file but
when adding a 'top layer' to run it on
server3.behavior :Behavior -> :MetamodelGD -
> :PackageGD it doesn't find a match
anymore but these only provide the reference to
the ecore file so it doesn't make any sense.
Best regards,
Daniel
Hello Kina,
Am 23.06.2017 um
12:06 schrieb Bojarczuk, Kinga:
Hello,
I'm working on this project on e-motions
files so basically there's a .behavior file
which is linked to .gcs which is linked to
.ecore file and together they represent a
graph transformation system. So what I'm
trying to do is to delete EReference from
.ecore file between the object that has some
subclasses and another object. (First rule
in my henshin file) This should find a match
as it exists in a server2.ecore file however
for some reason it doesn't.
To understand why the rule cannot be applied, it's
crucial to know that Henshin aims to ensure that
output models of a transformation are well-formed:
in particular, it aims to ensure that rule
applications never leave behind "dangling edges".
In your example rule, since you do not specify the
deletion of the containment edge between the
:EPackage and the :EReference, this edge would be
left behind as dangling, so Henshin won't apply
the rule.
To make the rule applicable, it should be
sufficient to specify the deletion of the
aforementioned containment edge. (Another option
is to the set the "checkDangling" attribute in the
rule to "false", however, in this case, you may
lose well-formedness guarantees.)
When I run the code straight on the
server2.ecore (by starting with EPackage in
my rule) file or server2.gcs (by starting
with MetamodelGD in my rule) file it works
and finds a match but when running on
server3.behavior file something suddenly
prevents it from finding a match which is
really weird as .behavior file just provides
a reference to the other files so since it
works when run straight on them it should
work on the the behavior file as well.
I can't find the code you mention in these
statements. The zip file only contains the models
and Henshin files.
Best regards,
Daniel
The Second rule shows the solution that we
thought might work as Links in .behavior
file are linked to EReferences so we thought
this might prevent deleting EReferences but
it doesn't work either.
The Third rule shows something that works
but is a rather 'unclean solution' as it
only deletes all the edges and doesn't
actually delete the node.
So any idea why running my rule on
.behavior file suddenly prevents it from
finding a match? It seems really weird so
I'd appreciate some help. I've included a
zip file with my project.
Thank you,
Kinga
_______________________________________________
henshin-user mailing list
henshin-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/henshin-user
_______________________________________________
henshin-user mailing list
henshin-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/henshin-user
_______________________________________________
henshin-user mailing list
henshin-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/henshin-user
_______________________________________________
henshin-user mailing list
henshin-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://dev.eclipse.org/mailman/listinfo/henshin-user
_______________________________________________
henshin-user mailing list
henshin-user@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://emea01.safelinks.protection.outlook.com/?url="">
--
Dr. rer. nat. Steffen Zschaler AHEA
Senior Lecturer
King's College London
Department of Informatics
Email szschaler@xxxxxxx
Phone +44 (020) 7848 1513
WWW http://www.steffen-zschaler.de/
|