OK, thanks Kinga for trying out the version without the multi-nodes.
Some new insights: I was able to apply the "First" rule to the
behavior model, after I turned off the dangling-edges check by
disabling the "checkDangling" attribute of the rule.
This implies there are some references in the input graph that
become dangling if the "EReference" node is deleted. To check if
this is the case, I inspected server3.behavior and noticed that it
indeed has many references to EReferences from the server2.ecore
file.
So, it's indeed a feature rather than a bug: please see the
explanation regarding dangling edges in my very first e-mail.
Best regards,
Daniel
Am 23.06.2017 um 19:17 schrieb
Bojarczuk, Kinga:
I've sent a simplified
version of the rule we were working on to Daniel and the
multi nodes are not doing anything there, I should have
deleted them as well. The rule
does not work after deleting them
either so in this case they are definitely not the problem
and the problem is in that delete EReference node somewhere.
Hi Steffen,
based on the information that the "First" rule cannot be matched
while the "Third" rule can, my feeling is that the multi-nodes
are not the root cause of the problem: If the LHS of the kernel
rule (the part without the multi-elements) can be matched, then
there is a match for the entire rule as well, since matching the
multi-rule is optional.
Of course, there is a simple way to be sure it's indeed not the
multi-nodes: you could remove them from the rule and see if the
problem still occurs.
BTW, I'm not sure about the actual purpose of the multi-nodes in
the "First" and "Third" rule. Since the multi-rules of these
rules don't specify any changes, they shouldn't have any effect
on rule applications anyways.
Best regards,
Daniel
Am 23.06.2017 um 17:53 schrieb
Steffen Zschaler:
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/
_______________________________________________
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
|