%*******************************************************************************
% Copyright (c) 2014 Formal Mind GmbH and others
% All rights reserved. This program and the accompanying materials
% are made available under the terms of the Eclipse Public License v1.0
% which accompanies this distribution, and is available at
% http://www.eclipse.org/legal/epl-v10.html
% 
% Contributors:
%     Michael Jastram - initial Copy
%     Maha Jastram - susequent improvements
%******************************************************************************/

% ===================================================================================
\section{Basic Concepts}
\label{sec:tutorial-basic-concepts}
\index{concepts}
% ===================================================================================

In this tutorial, we will use the ReqIF terminology, which can be confusing.  Therefore, please familiarize yourself with the terminology first (Section~\ref{sec:terminology}).

\begin{warning}
In ReqIF terminology, a requirement is called \term{SpecObject}, a link is a \term{SpecRelation}, and the document view consists of \term{SpecHierarchies}.  Confused? Then please have a look at Section~\ref{sec:terminology}, where the terminology is described.
\end{warning}

% ===================================================================================
\section{Tutorial 1: Creating a Basic ReqIF Model}
\label{sec:tutorial-create-basic-model}
% ===================================================================================

In this section, we will build a ReqIF model from scratch, step by step.

% -----------------------------------------------------------------------------------
\subsection{Install \pror{}}
\label{sec:install-reqif-studio}
\index{installation}
% -----------------------------------------------------------------------------------

The easiest way for installing \pror{} is downloading \href{https://reqif.academy}{ReqIF Studio}.  This is a standalone-application that is based on Eclipse RMF, combined with some enhancements.

 Alternatively, you can install RMF in any Eclipse-Installation via its update site (listed on the \href{https://www.eclipse.org/rmf/download.php}{RMF Download page}).  This is recommended for advanced users only who need to integrate RMF with other Eclipse-based components.

\begin{info}
The installation is described in detail in Section~\ref{sec:installation}.
\end{info}

% -----------------------------------------------------------------------------------
\subsection{Create the Model}
\label{sec:create-model}
\index{create ReqIF model}
\index{ReqIF model!create}
% -----------------------------------------------------------------------------------

\begin{itemize}

\item
  If you do not already have one, create a new \term{project}: Select  \menu{File | New | Project};
\item
  Create the ReqIF model by selecting \menu{File | New | Reqif10 Model};
\item
  Select the project and name the file ``tutorial.reqif''.  Click \menu{Finish};
\item
  Upon completion, the model will be opened, as well as the one and only \menu{Specification} contained in this model.
\end{itemize}

After this, your window should look more or less as shown in Figure~\ref{fig:pror_gui}.

\begin{figure}
  \centering
  \includegraphics[width=\linewidth]{../rmf-images/Screenshot_intro.png}
  \caption{The \pror{} user interface}
  \label{fig:pror_gui}
\end{figure}

You will see your ReqIF file in the \menu{Project Explorer} window (1).

The \menu{Specification Editor} (2) shows your \term{Specifications}.

In the Specification Editor, you see the \term{SpecObjects} that exist in this Specification.  There is currently only one, with the description ``Start editing here''.

The \menu{Outline} (3) has four folders:
\index{outline view}

\begin{description}
\item[Specifications.] Shows the Specifications in the ReqIF.  You can expand the tree to expose the hierarchy of SpecObjects in the ReqIF model.
\item[SpecObjects.] Shows all SpecObjects in the ReqIF model as a flat list.  Keep in mind that SpecObjects in Specifications are references.  In contrast, this folder shows all SpecObjects created for the ReqIF model, whether or not they are referenced.
\item[SpecRelations.] Shows all SpecRelations in the ReqIF as a flat list.  For now, we will ignore SpecRelations.
\item[SpecRelationsGroups.] These are special constructs that can be used for grouping SpecRelations with the same source and target.
\end{description}

The properties of a selected \term{SpecElement} are shown in the \menu{Properties View} (4).  As the only SpecObject in the model is selected, we see its \term{SpecType} (``Requirements Type'') and its only \term{Attribute} (``Description'') with the value ``Start editing here.''  There are two tabs \menu{Standard Attributes} and \menu{All Attributes} at the bottom of the \menu{Properties View}.  The \menu{Standard Attributes} tab shows you all standard attributes of the selected element.  \menu{All Attributes} shows all existing ReqIF attributes of the selected element.

Above the main working windows it the tool bar (5) and, at the very top, the menu bar (6).

% -----------------------------------------------------------------------------------
\subsection{Customizing the SpecType}
\label{sec:customize-spec-type}
\index{SpecType configuration}
\index{datatype configuration}
\index{configuration!SpecType}
\index{configuration!datatype}
% -----------------------------------------------------------------------------------

To get familiar with the tool, we will:

\begin{itemize}
\item
  Add two more attributes to the SpecObjectType called ``ID'' and ``Owner'' and
\item
  We will show those \term{Attributes} in the \term{Specification}
\end{itemize}

The results of this are shown in Figure~\ref{fig:datatype_configuration}.

\begin{figure}
\centering
\includegraphics[width=0.8\linewidth]{../rmf-images/datatype.png}
\caption{Datatype Configuration Dialog}
\label{fig:datatype_configuration}
\end{figure}

To add new attributes, we open the \menu{Datatype Configuration} dialog with \menu{Studio | Datatype Configuration}.  Alternatively you can also click on \includegraphics[height=0.8em]{../rmf-images/icons/full/obj16/SpecType.png} in the Tool Bar.

The resulting dialog box has two folders in the upper pane: one for \term{SpecTypes} and one for \term{Datatypes}.  Currently, there is only one Datatype ``T\_String32k'' and two SpecTypes, one called ``Requirements Type'' with the attribute ``Description'' and one called ``Specification Type'' with the attribute ``Description''.

In the lower pane are the details in regards to each attribute.

We add more Attributes to ``Requirements Type'' by right-clicking it and selecting \menu{New Child | Attribute Definition String}.  This will create a new element.  Upon selecting it, we can rename it and tailor the details.  Double-click on the ``Long Name'' variable and type in ``ID''.  Change the Type by double-clicking the field and choosing ``T\_String32k'' from the dropdown menu.  Repeat the process but this time change the ``Long Name'' to ``Owner''.  In the end, the dialog should look as shown in Figure~\ref{fig:datatype_configuration}.

Upon closing the dialog, little will have changed - the Specification still shows just two columns, Description and Link.  However, if you select the requirement, you will see the new Properties (ID and Owner) in the Property view.

% -----------------------------------------------------------------------------------
\subsection{Showing the New Attributes}
\label{sec:show-new-attributes}
\index{configuration!columns}
\index{column configuration}
% -----------------------------------------------------------------------------------

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/columnconfig.png}      
\caption{Column Configuration}
\label{fig:column_configuration}
\end{figure}

To show the new Attributes in the Specification, we have to configure the columns shown in the \menu{Specification Editor}.  We do this by selecting \menu{Studio | Column Configuration}.  You can also click on \includegraphics[height=0.8em]{../rmf-images/icons/full/obj16/Column.png} in the Tool Bar.

The resulting Dialog shows one entry, ``Description'' for the one and only Column of the Specification.  In the ``Value'' column double click on ``Description to choose it and replace it with ``ID''.

By clicking on the ``Add Column'' icon at the top of the dialog, create a new column and name it ``Description''.  In this view, the columns can be dragged and dropped to change their order as desired.

The resulting window is shown in Figure~\ref{fig:column_configuration}.

\begin{info}
Note that you have to provide free text for the columns for the same reason that we used free text for the ``Labels'' earlier: This way we can easily match multiple SpecObjects of different types.
\end{info}

You can actually adjust the width of the columns simply by dragging the column headers.

% -----------------------------------------------------------------------------------
\subsection{Adding new SpecObjects}
\label{sec:add-specobjects}
\index{SpecObjects!create}
\index{create!SpecObjects}
% -----------------------------------------------------------------------------------

\begin{figure}
\centering
\includegraphics[width=\linewidth]{../rmf-images/hierarchy_example.png}      
\caption{Adding SpecObjects}      
\label{fig:requirements_hierarchy}
\end{figure}

Now we can finally add \term{SpecObjects} by right-clicking on a row in the Specification View.  In the context-menu, there are two submenus: \menu{New Child} and \menu{New Sibling}.

In both menus, there are three entries \menu{Spec Hierarchy}, \menu{SpecObject} and \menu{SpecObject (Requirement Type)}.  Some background is needed here:

\index{SpecHierarchy}
We said before that Specifications contain references to SpecObjects.  A \menu{SpecHierarchy} is the wrapper that allows the hierarchical structure and that points to the referenced SpecObject.  Usually, we don't have to be concerned with them.  Therefore the second option: If selected, a new SpecHierarchy is created and associated with a new SpecObject, which in turn is set immediately to the given \term{SpecType}.  If we had more than just one SpecType (besides ``Requirements Type''), there would be an entry for each SpecType in the context menu.

To continue the exercise, select the \menu{New Child | SpecObject (Requirement Type)}.  Now we have two SpecObjects.  The original is numbered on the far left-hand side of the pane with a ``1''.  The second one, the child, is numbered ``1.1''.  Now we should change the ID's of each entry.  Click in the cell of the column ``ID`` (in row 1) and type in INF-1.  Under Description, type ''A ReqIF tutorial.``  For the second, change the ID to REQ-1 and ''Learn how to create a new requirement'' in the ``Description'' column.

Feel free to add a few more rows and or even new structures.  Yours should look somethinig similar to Figure~\ref{fig:requirements_hierarchy}.

% -----------------------------------------------------------------------------------
\subsection{Rearranging Elements}
\label{sec:rearrange-elements}
\index{SpecObjects!rearrange}
% -----------------------------------------------------------------------------------

\begin{figure}
\centering
\includegraphics[width=0.8\linewidth]{../rmf-images/draganddrop.png}    
\caption{Drag and Drop}      
\label{fig:dragAndDropChild}
\end{figure}

SpecObjects can be reordered by using drag and drop.  This works both in the \menu{Specification View} and the \menu{Outline View}.

You can drag and drop a SpecObject as a sibling or a child.  The highlighting feedback will enable you to see what you're moving and where to.  For instance, if you are dragging a SpecObject over another one, the entire cell will be highlighted.  This means, that the SpecObject will be assigned as a child to the dropped SpecObject.

If you are dragging a SpecObject between two rows, you also get visual feedback on whether the SpecObject will be assigned as a sibling.

Figure~\ref{fig:dragAndDropChild} shows drag and drop in action.

You can also move elements by using cut and paste.  Pasting will insert an element as a child.

% -----------------------------------------------------------------------------------
\subsection{Export Specification as HTML}
\label{sec:export-specs}
\index{printing}
\index{HTML export}
% -----------------------------------------------------------------------------------

If you want to export your Specification as HTML, open the Specification you would like to export and initiate printing \menu{File | Print...}.  The HTML representation is generated and opened in your system's web browser.

% -----------------------------------------------------------------------------------
\subsection{Conclusion}
\label{sec:tutorial-conclusion}
% -----------------------------------------------------------------------------------

Quite an achievement—but there's still a bit of a way to go.  One improvement we can make is simplifying data entry.  Another is improving  the visibility of the descriptions.  In the next part of the tutorial, we will address these issues.

% ===================================================================================
\section{Tutorial 2: Use Presentations}
\label{sec:tutorial-presentations}
\index{presentation}
\index{plugin}
% ===================================================================================

We will continue where we left off at the end of Tutorial 1 and we will assume that you have \pror{} open with a model identical or similar to the one we created earlier.

In this tutorial we will introduce \term{Presentations}.  Presentations are Eclipse Plug-Ins that extend the functionality of \pror{}.  Specifically:

\begin{itemize}
\item
  Presentations can change the way Attributes are rendered in the Specification,
\item
  Presentations can change the way Attributes are edited in the Specification and
\item
  Presentations can perform tasks in the background.
\end{itemize}

\pror{} comes with a number of standard presentations that we will introduce in this tutorial.

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/t_id.png}      
\caption{Datatype Configuration Dialog}      
\label{fig:datatypeConfig}
\end{figure}

% -----------------------------------------------------------------------------------
\subsection{ID Presentation}
\label{sec:id-presentation}
\index{create!id}
\index{id!creation}
% -----------------------------------------------------------------------------------

It would be nice if every SpecObject had its own unique ID.  Actually, they do: The unique ID is shown in the \menu{All Attributes} tab of the \menu{Property View}, if a SpecObject is selected.  But that ID is meant for machines and is not practical.

The ID Presentation allows the automatic creation of more user-friendly IDs.  Let's create one.

Remember that Presentations are associated with \term{Datatypes}, not \term{Attributes}.  Thus, we first have to create a new Datatype called ``T\_ID``.  We then associate that Datatype with the Attribute ``ID''.  We described this process in the first tutorial.  Figure~\ref{fig:datatypeConfig} shows the configuration dialog, when all is done.

The next step is the association of the Datatype with the Presentation.

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/presentation_id.png}      
\caption{Configuration of the ID Presentation}
\label{fig:idConfig}
\end{figure}

We open the Presentation Configuration and create a new Presentation from the dropdown menu \menu{Select Action...}, of type ``Id'' Presentation.  We associate it with the newly created Datatype.  After configuration, it would look as shown in Figure~\ref{fig:idConfig}.

Note that you can adjust the prefix, count and the vertical alignment of the presentation.

\begin{warning}
At this point, the Presentation does not yet check for duplicates.  It simply grabs a new value from count, increments it and uses it.  Also, existing values are never overwritten.
\end{warning}

% ===================================================================================
\section{Tutorial 3: Advanced SpecTypes}
\label{sec:tutorial-spec-types}
% ===================================================================================

So far, we have a model with only one SpecObjectType.  In this tutorial, we will show how we can work with multiple SpecTypes, and we will introduce other SpecTypes.

% -----------------------------------------------------------------------------------
\subsection{Multiple SpecTypes}
\label{sec:multiple-spec-types}
% -----------------------------------------------------------------------------------

The first entry in our Specification (``A ReqIF Tutorial'') isn't really a requirement.  Thus, it doesn't need an ID or an owner, and it would be nice to highlight it somehow.  For highlighting, we have the \menu{Headline Presentation}.  We will:

\begin{itemize}

\item
  Create a new \term{SpecType} for headlines.
\item
  Create a new \term{Datatype} that will be used for the headline content.
\item
  Associate that Datatype with the \menu{Headline Presentation}.
\end{itemize}

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/datatype_Headline_desc.png}      
\caption{Datatype Configuration for the Headline Presentation}      
\label{fig:headlineConfig}
\end{figure}

By selecting \menu{Studio | Datatype Configuration}, we open the dialog where we can create new SpecTypes and Datatypes.  For the first time, we create a new SpecType by right-clicking on \menu{SpecTypes}.  One of the entries in the child menu is \menu{SpecObject Type}.

Once created, we select it and rename as ``Headline Type'' in the \menu{Property Pane}.

Then we give it a new Attribute called ``Description'' by right-clicking it and selecting \menu{String}.

\begin{warning}
It is important that we call it ``Description''.  This matches the Attribute name from ``Requirement Type''.  By using the same name, we ensure that the Attributes \textbf{appear in the same column}, even though they are different Attributes from different SpecTypes.
\end{warning}

We do not set the type yet, as we need to create a new Datatype.  We do this, as before, by right-clicking on the \menu{Data\-types} folder in the upper pane.  Create a child of type \menu{Definition String}.  Call it ``T\_Headline'' and set the length to 50.  Now we can go back to the ``Description'' Attribute (in the upper pane) and set the type to T\_Headline, which is now available from the dropdown.

When all this is done, the resulting configuration should look as shown in Figure~\ref{fig:headlineConfig}.

You can change the type of a SpecObject by selecting it and changing it in the \menu{Properties View}.  Please note that currently all existing values are lost when changing the type.

Note the following:

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/hierarchy_step_1}
\caption{Activated Headline Configuration}      
\label{fig:activeHeadlineConfig}
\end{figure}

\begin{itemize}
\item
  For SpecObjects of this SpecType, the columns ``ID'' and ``Owner'' are now empty and cannot be edited.
\item
  Note how the \menu{Property View} changes as you select SpecObjects of different SpecTypes.
\item
  Right-clicking on a row now shows one more option for child/sibling creation: A new entry of type ``Headline Type''.
\item At this point, the description of the headline is not yet formatted, as we have not activated the Presentation yet.
\end{itemize}

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/Presentation_headline.png}      
\caption{Presentation Configuration for Headline}      
\label{fig:headlineConfig2}
\end{figure}

Last, we will create a \menu{Headline Presentation} and activate it for the type ``T\_Headline''.  This is done via the \menu{Presentation Configuration}, as before.  The configuration allows you to change the font size of the headline in the ``Size'' property.  The presentation configuration is shown in Figure~\ref{fig:headlineConfig2}.

After all the changes, the Specification should look as shown in Figure~\ref{fig:activeHeadlineConfig}.  Note that the formatting is also applied in the \menu{Properties View}.

% -----------------------------------------------------------------------------------
\subsection{Other SpecTypes}
\label{sec:other-spec-types}
% -----------------------------------------------------------------------------------

\begin{figure}
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/new_spectype.png}      
\caption{Creating a New SpecType}      
\label{fig:newSpecType}
\end{figure}

You may have noticed in the \menu{Datatype Configuration Dialog}, that right-clicking on \menu{SpecTypes} offered more options, besides \menu{SpecObject Type}.  A number of Elements can have Attributes, not just SpecObjects.

We will now create a \term{SpecificationType} and assign it to our Specification.

Try to create a SpecificationType and configure it as shown in Figure~\ref{fig:newSpecType}:

Next, we will assign this type to the one Specification that we have.  To do this we select the Specification in the \menu{Outline View} (first element in the Folder \menu{Specifications}).  That will show
the Specification's properties in the \menu{Properties View}.  The \menu{Type} property is empty.  We select ``Specification Type'' from the dropdown.

As soon as it is selected, the Attribute ``Description'' will appear in the Properties View, as now the Specification has an attribute of that name.  If we set it to a meaningful name, the label in the Outline View will change as well.

% ===================================================================================
\section{Tutorial 4: Links Between Elements}
\label{sec:tutorial-links}
\index{create!SpecRelations}
% ===================================================================================

A central feature of professional requirements tools is the ability to connect requirements with each other.  These are typically called links, traces or relations.  In ReqIF, these are \term{SpecRelations}.

% -----------------------------------------------------------------------------------
\subsection{Creating SpecRelations}
\label{sec:create-links}
% -----------------------------------------------------------------------------------

There are two ways of creating SpecRelations: (1) via the context menu and (2) via drag and drop.

\begin{info}
We recommend to use the context menu for linking.  It works even if source and target are not visible, it allows n:m linking, and it allows for the assignment of a SpecType to the newly created SpecRelations in one step.
\end{info}



% -----------------------------------------------------------------------------------
\subsection{Linking Via Context Menu}
\label{sec:context-links}
% -----------------------------------------------------------------------------------

Linking via context menu happens in two steps: initiating linking and completing linking.

Linking is initiated by right-clicking on one SpecObject, or a selection of SpecObjects.  The context menu contains the option \menu{Initiate Linking}, with a number in parentheses. The number indicates the count of affected SpecObjects.

Linking can only be completed if it has been initiated.  In that case, right-clicking on a single SpecObject or a selection of SpecObjects will show two more entries in the context menu.  These are \menu{Complete Linking To Selection} and \menu{Complete Linking From Selection}.  It will also indicate in parentheses with how many SpecObjects the linking had been initialized.

Each of these entries has a submenu, listing all SpecTypes for SpecRelations.  By selecting the appropriate option, SpecRelations will be created between the two sets of SpecObjects.  The SpecRelations will have the selected SpecType.

% -----------------------------------------------------------------------------------
\subsection{Linking Via Drag and Drop}
\label{sec:drag-links}
% -----------------------------------------------------------------------------------

SpecRelations are also be created by ``Link-Dragging''.  This is platform specific:

\begin{description}

\item
  [Linux.] Dragging with Ctrl-Shift.
\item
  [Mac.] Hold down OPTION and APPLE/COMMAND keys while dragging.
\item
  [Windows.] Dragging with Alt.
\end{description}

% -----------------------------------------------------------------------------------
\subsection{SpecRelations in the User Interface}
\label{sec:links-ui}
% -----------------------------------------------------------------------------------

\begin{figure}   
\centering      
\includegraphics[width=0.8\linewidth]{../rmf-images/links.png}      
\caption{Showing Links in the GUI}      
\label{fig:linksInGui}
\end{figure}

After creating SpecRelations, the right-most column (\menu{Link}) in the \menu{Specification Editor}, has content.  It summarizes the number of incoming and outgoing SpecRelations.  The number to the left of the triangle is incoming links, the other, outgoing links (see Figure~\ref{fig:linksInGui}).

Showing SpecRelations \textbf{for a single SpecObject} can be switched on or off by double-clicking on the Link cell.

Showing SpecRelations \textbf{for all SpecObjects} can be switched on or off with the little triangle icon in the toolbar \includegraphics[height=0.8em]{../rmf-images/icons/full/obj16/SpecRelation.png}.

As SpecRelations can have Attributes, these are shown in the corresponding column, if the column name matches the Attribute name.  Selecting the row of a SpecRelation will show all its Attributes in the \menu{Properties View}.

The \menu{Link} cell of a SpecRelation shows the label of the link target of that SpecRelation.  Selecting it will show the link target's Attributes in the \menu{Properties View} (instead of the SpecRelation's Attributes, as for all other cells).

\begin{info}
Selecting the \menu{Link} column of a SpecRelation allows the link target to be quickly inspected.
\end{info}

Figure~\ref{fig:linksInGui} shows a Specification where REQ-1a and REQ-3a are linked.

% -----------------------------------------------------------------------------------
\subsection{Following SpecRelations}
\label{sec:follow-links}
\index{SpecRelations!follow}
\index{follow SpecRelations}
% -----------------------------------------------------------------------------------

It is possible to navigate along SpecRelations. To do so, make the links visible, as described in Section~\ref{sec:links-ui}. Double-clicking on the label of the link target will open the appropriate Specification and select the SpecObject.

As Specifications contain references to SpecObjects, there are two other situations that can occur:
\begin{description}

\item
  [The target SpecObject is not used in any Specification.] In that situation, double-clicking will have no effect. But clicking on the label will show the target SpecObject's attributes in the Properties View, where they can be inspected and edited.
\item
  [The target SpecObject is referenced multiple times.] In that case, a menu will open to show all places where the SpecObject is used. The user can select the place to navigate to.
\end{description}

% -----------------------------------------------------------------------------------
\subsection{SpecRelations in the Outline View}
\label{sec:links-outline}
% -----------------------------------------------------------------------------------

The \menu{Outline View} has a folder showing all SpecRelations. This folder is shown only when the ReqIF editor (Section~\ref{sec:reqif-editor}) is active.

