Home » Archived » EMF-IncQuery » Duplication issue of Item and Edge in Zest graph(I have duplication relations in the graph)
Duplication issue of Item and Edge in Zest graph [message #1433249] |
Sun, 28 September 2014 12:52  |
Salwa Alzahmi Messages: 37 Registered: June 2013 |
Member |
|
|
Hi,
I am trying to create Zest viewer to the library example.
I created a viewpart and i define the state where I bind with the viewer.
The visualizer work fine , but the only issue that there are redundancy in the created relations between Items. for example i passed the library's example finalPattern to the engine to view the result on zest. the resulted graph shows a duplication of Teacher item.
please see the attach photo and source code .
you help is highly appreciate it
[Updated on: Sun, 28 September 2014 12:55] Report message to a moderator
|
|
|
Re: Duplication issue of Item and Edge in Zest graph [message #1433259 is a reply to message #1433249] |
Sun, 28 September 2014 13:12   |
Zoltan Ujhelyi Messages: 392 Registered: July 2015 |
Senior Member |
|
|
Hi Salwa,
I tried to look at the source attachment, but it sadly misses the patterns you initialize the Zest Viewer from. If possible, next time please try to include your entire project as is to allow executing it; as this was usually it is much easier to figure out where the problem lies.
However, I can still give some pointers where to look for item duplication issues: items (graph nodes) are not created on a per-object but a per-match basis. This means, if you have two queries annotated with @Item that return the same EObject, the visualization will display two different graph nodes. The same issue comes forth if you have a pattern, that returns the same model element multiple times. E.g. consider the following example (I guess, your code is similar to this):
@Item(item = T, label = "$T.name$")
pattern finalPattern(Y : Year, C : Course, T : Teacher, S : Student) {
Year.schoolClasses.courses(Y, C);
Course.teacher(C, T);
Student.schoolClass.courses(S, C);
find theOnesWithTheBiggestCircle(S);
find teachesTheMostCourses(T);
}
In this case, when a teacher teaches multiple students, there are multiple matches that contain the same teacher (e.g. {2012, Modeling, "Dániel Varró", "Zoltán Ujhelyi"} and {2012, Modeling, "Dániel Varró", "Zoltán Ujhelyi"}, and the viewers framework creates a graph node from each match.
If you want to avoid such multiplication, you should use a pattern that disallows duplication of the model elements, e.g. use a simple pattern that returns all teachers/students; or create a helper pattern with only a single parameter:
@Item(item = T, label = "$T.name$")
pattern helper(T: Teacher) {
find finalPattern(_, _, T, _);
}
I hope, the answer was clear enough. If not, feel free to ask for clarifications.
Cheers,
Zoltán
|
|
|
Re: Duplication issue of Item and Edge in Zest graph [message #1433640 is a reply to message #1433259] |
Mon, 29 September 2014 04:12  |
Salwa Alzahmi Messages: 37 Registered: June 2013 |
Member |
|
|
Thank you for your prompt reply.
Yes , That was helpful.
I create two helper method to display the Item ,and I have the original method for displaying the Edge.
In my ViewPart, I create a collection of pattern specifications and Pass it to my ViewerState.
@Item(item = T, label = "$T.name$")
pattern helper(T: Teacher) {
find finalPattern(_, _, T, _);
}
@Item(item = S, label = "$S.name$")
pattern helper(S: Student) {
find finalPattern(_, _, _, S);
}
@Edge(source = T, target = S, label = "busiest ")
pattern finalPattern(Y : Year, C : Course, T : Teacher, S : Student) {
Year.schoolClasses.courses(Y, C);
Course.teacher(C, T);
Student.schoolClass.courses(S, C);
find theOnesWithTheBiggestCircle(S);
find teachesTheMostCourses(T);
}
THank you for you help.
|
|
|
Goto Forum:
Current Time: Thu Mar 30 17:23:49 GMT 2023
Powered by FUDForum. Page generated in 0.02118 seconds
|