<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
		<title>ToolsSpecification</title>
		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
	</head>
	<body>
		<h3 id="ToolsSpecification">Tools Specification</h3>
		<p>All tools are specified in roughly the same way. Like most elements inside the VSM, they have an 
			<em>Id</em> and a 
			<em>Label</em>. For elements which will appear to the end-user (in the palette or in menus), make sure the 
			<em>Label</em> is meaningful to them.
		</p>
		<p>
			<strong>Tools Applicability</strong>. Most tools apply to a set of 
			<em>Mappings</em>, sometimes only on certain kinds of mappings (e.g. 
			<em>Container Drop</em> description only makes sense for container mappings). For tools which create new elements, the 
			<em>Mappings</em> correspond to the kinds of elements the tool will create. For other tools, it corresponds to the kinds of element the tool can be applied to.
		</p>
		<p>Many tools also support the notion of 
			<em>Extra Mappings</em>. If these are specified, they indicate other kinds of elements than the primary ones on which the tool can be applied.
		</p>
		<p>The 
			<em>Precondition</em> of a tool definition can be used to restrict its applicability to only some instances of the 
			<em>Mappings</em> (and 
			<em>Extra Mappings</em>) associated with the tool. When the user tries to invoke the tool on an element, the expression will be evaluated in the context of that element' semantic target, and the tool will be applicable only if the expression returns true. Otherwise the user will have a feedback (typically a change in the mouse cursor&#8217;s shape) to indicate the tool can not be applied on this element.
		</p>
		<p>
			<strong>Force Refresh.</strong> Tools have a 
			<em>Force Refresh</em> flag. As most tools only perform a local change in the underlying model, by default Sirius will try to optimize its refresh operation (which synchronizes the graphical view with the state of the underlying semantic model) by only refreshing elements of the mappings explicitly associated with the tool. If you know your tool will have side-effects which can change other parts of the diagram, set the 
			<em>Force Refresh</em> flag to force Sirius to perform a complete refresh of the whole diagram after the tool is executed. This ensures a perfect synchronization of the graphical representation with the state of the underlying model, possibly at the cost of performance and reactivity on big diagrams. The refresh will be effective only on the current diagram and not on all opened diagrams.
		</p>
		<p>
			<strong id="selectionAfterToolExecution">Selection after tool execution.</strong> The 
			<em>Elements to select</em> and 
			<em>Inverse Selection Order</em> flags can be used to defined what is selected in the active editor after tool execution. 
			<br/>By default, only the top level created elements are selected.
		</p>
		<ul>
			<li>
				<code>Elements to select</code>: Expression to list the elements to select after tool execution. There are four possibilities for the list of elements returned by this expression. In any case, if the default list of elements is not empty, the list of elements returned is filtered with the default selected elements. In case of creation tool, the default list contains newly created elements so, the returned list can contain at most that elements.
				<ul>
					<li>Empty expression: The default behavior is applied: if graphical elements has been created, these elements will be selected(excluding the sub elements), else, the selection is unchanged.</li>
					<li>List of 
						<code>DRepresentationElement</code>: All this graphical elements will be selected after the execution of the tool.
					</li>
					<li>List of semantic elements: All 
						<code>EObject</code> that are not a 
						<code>DRepresentationElement</code> are considered as semantic elements. All graphical elements corresponding to these semantic elements will be selected after the execution of the tool.
					</li>
					<li>Empty list: Nothing is selected after the execution of the tool.</li>
					<li>List with only the 
						<code>DRepresentation</code>: It will be considered as empty list.
					</li>
					<li>List with a mix of 
						<code>DRepresentationElement</code> and non 
						<code>DRepresentationElement</code> is forbidden. A such list will be considered as empty list.
					</li>
				</ul>
			</li>
			<li>
				<code>Inverse Selection Order</code> : By default, false, the elements are selected in the order of the list or the default list if existing. It is possible to inverse this order by setting this property to true. To be more precise, the meaning of this property depends on the value of elementsToSelectExpression:
				<ul>
					<li>List of 
						<code>DRepresentationElement</code>: The elements are selected in order of the list (first element is selected in first, second element is selected in second, and so on). The last graphical element of the list will be the primary selection. If 
						<code>inverseSelectionOrder</code> is true, the order is reverted.
					</li>
					<li>List of semantic elements: The elements are selected in order of the list (the graphical element corresponding to the first semantic element is selected in first, the graphical element corresponding to second semantic element is selected in second, and so on). And if several graphical elements correspond to the same semantic element, they are selected on their default order. The last element is the primary selection. If 
						<code>inverseSelectionOrder</code> is true, the order is reverted (the order of the list AND the order of several graphical elements corresponding to the same semantic element).
					</li>
					<li>Empty list or list with only the 
						<code>DRepresentation</code>: The 
						<code>inverseSelectionOrder</code> is ignored in this context.
					</li>
				</ul>
			</li>
		</ul>
		<p>Some services exist natively in Sirius and can be used to contribute new select all actions for diagram. These services are all in the class 
			<code>org.eclipse.sirius.diagram.ui.tools.api.interpreter.StandardDiagramServices</code>:
		</p>
		<ul>
			<li>
				<code>stdGetViewsRepresentingSameEType(DSemanticDiagram, List&lt;DSemanticDecorator&gt;)</code>: Return the list of 
				<code>DSemanticDecorator</code> representing semantic element with same EType as the current selected diagram elements.
			</li>
			<li>
				<code>stdGetViewsWithSameMapping(DSemanticDiagram, List&lt;DSemanticDecorator&gt;)</code>: Return the list of 
				<code>DSemanticDecorator</code> having the same mappings as the current selected diagram elements.
			</li>
			<li>
				<code>stdGetViewsRepresentingSelectedType(DSemanticDiagram)</code>: Return the list of 
				<code>DSemanticDecorator</code> in the current diagram representing semantic element having the EType provided by the end-user through a dialog box. This dialog box can be improved. There is currently no completion, neither validation.
			</li>
			<li>
				<code>stdGetViewsOfExpression(DSemanticDiagram)</code>: Return the list of 
				<code>DSemanticDecorator</code> corresponding to the evaluation of an expression written by the end-user in a dialog box. This dialog box can be improved. There is currently no completion, neither validation.
			</li>
		</ul>
		<p>
			<strong>Tools' Body and Variables.</strong> The actual effect of a tool is defined inside its 
			<em>body</em>, which is usually represented by a 
			<em>Begin</em> element (the starting point of the tool&#8217;s execution). You can use any of the available 
			<a href="../general/Model_Operations.html">model operations</a> to specify the behavior of your tools, including, if necessary, operations which invoke complex algorithms written in Java. Inside the tools&#8217;body, you have access to 
			<em>variables</em>, which are specific to each kind of tools and give you all the necessary information on how the tool was invoked, on which elements, etc. How you access these variables from the expressions inside the tool&#8217;s body depend on the query language you use for the expressions.
		</p>
		<p>
			<strong>Static Variables.</strong> The static variables defined by each tool are visible directly inside the tool&#8217;s element in the VSM. The exact set of variables available will depend on each tool, but typically you will have access to both 
			<em>semantic variables</em> which reference semantic elements and 
			<em>view variables</em> which reference graphical elements. As an example, in a 
			<em>Node Creation Tool</em>, you have both a 
			<em>container</em> and a 
			<em>containerView</em> variable. 
			<em>containerView</em> will point to the graphical element on which the user invoked the node creation tool (for example a container view) while 
			<em>container</em> will point to that view&#8217;s target semantic element. Usually the tools use only the semantic variables, but you may want to use the view variables if the same semantic elements can be represented in different ways on your diagram and you want your tool to behave differently depending on which of these representations the user targeted.
		</p>
		<p>
			<strong>User-Defined Variables.</strong> In addition to the static variables which are pre-defined by Sirius for each kind of tool, you can define your own, which will also be available inside the tool&#8217;s body. These user variables are defined as sub-elements of the static variables using the 
			<em>New Variable...</em> context menu. There are two kinds:
		</p>
		<ul>
			<li>
				<em>Expression Variables</em> have a name and a 
				<em>Computation Expression</em>. When the tool is invoked, the computation expression will be evaluated in the context or the parent variable&#8217;s value (i.e. the static variable inside which the 
				<em>Expression Variable</em> is defined).
			</li>
			<li>
				<em>Select Model Element Variables</em> will open a dialog box when the tool is invoked, from which the user can manually select model elements from a list you can configure. The element or elements selected by the user will become the value of the variable. To configure the dialog box, you must set a 
				<em>Message</em> and a 
				<em>Candidates Expression</em> (evaluated in the context of the parent variable&#8217;s value). The candidates expression should return a list of elements from which the user can select the variable&#8217;s value. By default these candidates are presented as a list. You can also enable the 
				<em>Tree</em> mode, and specify a 
				<em>Children Expression</em>, which will be evaluated recursively on each candidate to build a tree of possible values. Finally, you can set the 
				<em>Multiple</em> flag to allow users to select several of the candidates instead of a single one.
			</li>
		</ul>
		<p>
			<strong>Tool Filters.</strong> Tool filters can be specified inside a tool to hide a tool in the diagram palette depending on dynamic conditions. The 
			<em>Elements To Listen</em> is evaluated in the context of the diagram&#8217;s semantic element, and should return a set of semantic elements. The 
			<em>Precondition</em> is re-evaluated in the context of the diagram whenever a change occurs on 
			<em>Elements To Listen</em>.
		</p>
	</body>
</html>