diff --git a/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.html b/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.html new file mode 100644 index 0000000000..2b0ed6a7eb --- /dev/null +++ b/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.html @@ -0,0 +1,139 @@ + + +
+ +This document answers some common questions that specifiers can have when creating advanced Sirius modelers.
+All Sirius model elements which represent a semantic/domain element implement the
+ org.eclipse.sirius.viewpoint.DSemanticDecorator
interface, which provides the
+ getTarget()
method (actually an EMF EReference) to access the underlying
+ EObject
.
+
This is the case for:
+DSemanticDiagram
that inherit from
+ DDiagram
; tables, instances of
+ DTable
; and trees, instances of
+ DTree
@);
+ DRepresentationElement
) inside these representations:
+ DNodes
/@DContainer@ /@DEdges@ /etc. in diagrams,
+ DLine
/@DColumn@ in tables, and
+ DTreeItem
in tree representations.
+ DRepresentationElement
also provides
+ getSemanticElements()
to access the “secondary” associated semantic elements, if any (the ones specified via “Associated Elements Expressions” in the mapping definitions).
+ This is the opposite operation of the previous section.
+Sirius maintains an session-scoped inverse cross-referencer which can be used to find “who references who” even in the absence of explicit navigable references in the model.
+
Sirius representation elements have a reference to the semantic model they represents, so you can use it for this kind of task.
+
The most convenient way is to use the
+ org.eclipse.sirius.business.api.query.EObjectQuery
:
+
Collection<EObject> result = new EObjectQuery(mySemanticElement).getInverseReferences(ViewpointPackage.Literals.DSEMANTIC_DECORATOR__TARGET);
+
+ Note that this will find all the
+ DSemanticDecorators
which represent
+ mySemanticElement
in the whole session (all representations included), which may or may not be what you want.
+
If you need more precision, you will have to filter the result (using
+ EObjectQuery#getRepresentation(DRepresentation)
for example to restrict to a specific diagram).
+
To control the permission on object edition, Sirius use an implementation of
+ IPermissionAuthority
.
+
A default one named
+ ReadOnlyPermissionAuthority
is used by Sirius, to enable the read-only mode you can the following code snippet:
+
IPermissionAuthority permissionAuthority = IPermissionAuthorityRegistry.getPermissionAuthority(session.getTransactionalEditingDomain().getResourceSet());
+if (permissionAuthority instanceof ReadOnlyPermissionAuthority) {
+ ((ReadOnlyPermissionAuthority) permissionAuthority).activate();
+}
+
+ To better control permissions, you can provide your own
+ IPermissionAuthority
implementation using the
+ PermissionProvider
extension point.
+
In addition to its “main” label, an edge on a diagram can also have optional labels at the beginning (source-side) and/or end (target-side).
+
However direct edit tools associate with the edge only allow to edit the main label, not the begin/end ones.
+
Currently the only way to overcome this limitation is to programmatically contribute additional edit policies on the corresponding GMF Edit Parts.
+
+ UML Designer does this for UML associations: see the code
+ here for how this can be implemented.
+
You can define the location and size of additional created nodes/edges by using the “CreateView/CreateEdgeView” operation in the creation tool and calling a Java service to use
+ org.eclipse.sirius.diagram.ui.business.api.view.SiriusLayoutDataManager
API.
+
Sirius will use this singleton to know the location and size with which to create the nodes/edges.
+
After having called
+ CreateView
operation to get the
+ DDiagramElement
created, you can call a Java service as sub operation (a
+ ChangeContext
for example), and in this Java service call:
+
LayoutData layoutData = SiriusLayoutDataManager.INSTANCE.getData(createdView, true);
+// Update the layout data
+
+ + Warning: The getData() method does not always return layout data as it does not always exist. See next section for another way of doing this. +
+Inside a tool which creates a new node one can use an existing node to set the location and size of the node.
+
The tip is to inject a new
+ RootLayoutData
into the
+ SiriusLayoutDataManager
.
+
This layout data must concern the graphical container of the new node.
+
When Sirius creates the new node, it looks into the
+ LayoutDataManager
if hints exist.
+
The following method use an existing node to retrieve its location and size and use them to define the location and size of the next created node.
+
One could also modify the coordinates before putting them into the layout data manager.
+
The code uses the
+ getEditPart()
method defined in the next section.
+
private void setGraphicalHintsFromExistingNode(DDiagramElement existingNode) {
+ // Give hints about location and size
+ IGraphicalEditPart editPart = getEditPart(existingNode);
+ if (editPart instanceof ShapeEditPart) {
+ ShapeEditPart part = (ShapeEditPart)editPart;
+ SiriusLayoutDataManager.INSTANCE.addData(new RootLayoutData(existingNode.eContainer(), part.getLocation(), part.getSize()));
+ }
+}
+
+ private IGraphicalEditPart getEditPart(DDiagramElement diagramElement) {
+ IEditorPart editor = EclipseUIUtil.getActiveEditor();
+ if (editor instanceof DiagramEditor) {
+ Session session = new EObjectQuery(diagramElement).getSession();
+ View gmfView = SiriusGMFHelper.getGmfView(diagramElement, session);
+
IGraphicalEditPart result = null;
+ if (gmfView != null && editor instanceof DiagramEditor) {
+ final Map<?, ?> editPartRegistry = ((DiagramEditor) editor).getDiagramGraphicalViewer().getEditPartRegistry();
+ final Object editPart = editPartRegistry.get(gmfView);
+ if (editPart instanceof IGraphicalEditPart) {
+ result = (IGraphicalEditPart) editPart;
+ return result;
+ }
+ }
+ }
+ return null;
+ }
+ Use the
+ DialectManager
singleton:
+
DialectManager.INSTANCE.getAllRepresentations(session);
+
+ Also, if you only need the Name/Description of all diagrams, it might be better to use
+DialectManager.INSTANCE.getAllRepresentationDescriptors(session);
+
+
+
\ No newline at end of file
diff --git a/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.textile b/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.textile
new file mode 100644
index 0000000000..89bec7cf58
--- /dev/null
+++ b/plugins/org.eclipse.sirius.doc/doc/specifier/FAQ.textile
@@ -0,0 +1,112 @@
+h1. Sirius Desktop FAQ
+
+This document answers some common questions that specifiers can have when creating advanced Sirius modelers.
+
+h3. When I select a element in Sirius diagram, it returns a instance of DDiagram, but i want to get instances of EObject. Is there any way to get EObject from selection in Sirius Diagram?
+
+All Sirius model elements which represent a semantic/domain element implement the @org.eclipse.sirius.viewpoint.DSemanticDecorator@ interface, which provides the @getTarget()@ method (actually an EMF EReference) to access the underlying @EObject@.
+
+This is the case for:
+* all "top-level" representations (diagrams, which in practice are instances of @DSemanticDiagram@ that inherit from @DDiagram@; tables, instances of @DTable@; and trees, instances of @DTree@@);
+* all the individual elements (@DRepresentationElement@) inside these representations: @DNodes@ /@DContainer@ /@DEdges@ /etc. in diagrams, @DLine@ /@DColumn@ in tables, and @DTreeItem@ in tree representations. @DRepresentationElement@ also provides @getSemanticElements()@ to access the "secondary" associated semantic elements, if any (the ones specified via "Associated Elements Expressions" in the mapping definitions).
+
+h3. Retrieve a DNode (or another Sirius representation element) from given semantic element
+
+This is the opposite operation of the previous section.
+
+Sirius maintains an session-scoped inverse cross-referencer which can be used to find "who references who" even in the absence of explicit navigable references in the model.
+Sirius representation elements have a reference to the semantic model they represents, so you can use it for this kind of task.
+The most convenient way is to use the @org.eclipse.sirius.business.api.query.EObjectQuery@ :
+
+bc.
+ Collection