After deactivating its dangling-edges check, the "Second" rule can
be matched as well.
What this really means is that the "Second" rule is a very
interesting edge case: When considering the kernel rule on its own,
the dangling check should indeed fail. But when we consider the
multi-rule as well, we can find a match, since the multi-rule
specifies the necessary deletions of the adjacent edges.
I would say this is actually a bug of the Henshin interpreter, since
it shouldn't check the dangling condition of the kernel rule before
it considers the multi-rules. I'll look more detailedly into this
issue and hopefully fix it with the next Henshin release. For now, I
hope you can live with deactivating the dangling-edges check.
Best regards,
Daniel
Am 23.06.2017 um 19:46 schrieb
Bojarczuk, Kinga:
If that is the case, then wouldn't the 'Second' rule work as
it aims to delete these references with the use of multi-nodes
?
Thank you,
Kinga
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
_______________________________________________
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
|