about searching
Eclipse
Eclipse – GMF – Making Figures Sensitive To Attributes Of Semantic Elements
Jan 21st
TASK:
Change a diagram editor generated by GMF to make its figures sensitive to changes of semantic elements’ attributes’ values. Changes of attributes’ values should be automatically detected and reflected in figures’ look.
SOLUTION:
You have to make a little change in *EditPart class. I’m going to change edit part for the semantic model element named Port, so I will edit my.package.diagram.edit.parts.PortEditPart class.
Add a new method to the PortFigure class, which is PortEditPart‘s inner class:
public void updateFace() { Port port = (Port) ((Node) PortEditPart.this.getModel()).getElement(); // set line width according to number of some children int lineWidth = 1; if (port.getLogicalUnits().size() > 1) { lineWidth = 2; } this.setLineWidth(lineWidth); // update tooltip String tooltipText; if (port.getDescription() != null && port.getDescription().length() > 0) { tooltipText = port.getDescription(); } else { tooltipText = port.getName(); } if (getToolTip() == null) { setToolTip(new Label(tooltipText)); } else if (getToolTip() instanceof Label) { ((Label) getToolTip()).setText(tooltipText); } }
The updateFace method makes actual changes to the figure’s look. This example implementation sets the line’s width according to the number of Port’s children (port.getLogicalUnits().size()) and sets the tool-tip text to the value of element’s attribute named description.
Then you have to hook up this method in two places: PortFigure‘s constructor to update the look when editor starts and the handleNotificationEvent method to react to live changes.
Change PortFigure‘s constructor to make it use new method.
/** * @generated NOT */ public PortFigure() { this.setFill(true); this.setFillXOR(false); this.setOutline(true); this.setOutlineXOR(false); this.setLineStyle(Graphics.LINE_SOLID); //this.setLineWidth(1); //this.setForegroundColor(PORTFIGURE_FORE); //this.setBackgroundColor(PORTFIGURE_BACK); updateFace(); createContents(); }
Override handleNotificationEvent(Notification notification) method in PortEditPart.
@Override protected void handleNotificationEvent(Notification notification) { if (notification.getNotifier() instanceof Port) { getPrimaryShape().updateFace(); } super.handleNotificationEvent(notification); }
Without this method you would need to restart editor to reflect element’s changes in figure parameters.
Tested on GMF version 2.0.
Eclipse GMF – Enabling UUIDs in Semantic model – The Simplest Way
Jul 2nd
This solution is for those who use also GMF. In one of your plug-ins (or create a new empty plug-in for that) add following section to plugin.xml:
<extension point="org.eclipse.emf.ecore.extension_parser">
<parser type="MY_SEMANTIC_MODEL_FILE_EXTENSION"
class="org.eclipse.gmf.runtime.emf.core.resources.GMFResourceFactory">
</parser>
</extension>
It will make EMF use GMFResourceFactory for XMI [de]serialization. GMFResourceFactory enables usage of UUIDs. Don’t forget to replace MY_SEMANTIC_MODEL_FILE_EXTENSION with your own file extension.