Jump to: navigation, search

Difference between revisions of "MoDisco/Components/FacetManager"

(Category:MoDisco)
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
The MoDisco role component introduced the "role" concept. A role
+
#REDIRECT [[MoDisco/Moved To Help Center]]
is a kind of virtual class extension. Those "virtual classes" will never
+
have instances. An object can conform to a role but can not be an
+
instance of a role.
+
 
+
For example, assuming we have a class named Employee and two
+
roles: "Manager" and "Developer". We will have a set of Employee instances and
+
some of them will have the role of "Manager" or "Developer".
+
 
+
The goal of introducing the role concept is to be able to highlight
+
some model elements having a specific role.
+
 
+
The MoDisco role feature allows describing and using roles. The
+
description is done by editing a model and the use is done through an
+
API. The main client of this API is the MoDisco model browser.
+
 
+
==How to create a model role set==
+
The first step is to [[MoDisco/ProjectNature|create
+
a MoDisco project]].
+
 
+
The second step is to [[MoDisco/QueryManager|create
+
a query set]]. This query set will store boolean queries indicating if an
+
object conforms to a role.
+
 
+
Right-click on the MoDisco project and select the "New > Other
+
..." button.
+
 
+
[[Image:MoDisco_Role_newRoleSet_001.gif]]
+
 
+
Select "Role Model" and press the "Next" button
+
 
+
[[Image:MoDisco_Role_newRoleSet_002.gif]]
+
 
+
Choose a name for your model role set (My.roleSet in the example)
+
and press "Next".
+
 
+
[[Image:MoDisco_Role_newRoleSet_003.gif]]
+
 
+
 
+
Select "RoleSet" in the "Model Object" list and press "Finish"
+
 
+
[[Image:MoDisco_Role_newRoleSet_004.gif]]
+
 
+
[[Image:MoDisco_Role_newRoleSet_005.gif]]
+
 
+
Open the "My.roleSet" file and open the "Properties View"
+
 
+
[[Image:MoDisco_Role_newRoleSet_006.gif]]
+
 
+
Set the name of the role set and make sure that the role set name
+
is the same as the containing file name ("My" in the example). The
+
nsURI and prefix must also be filled.
+
 
+
[[Image:MoDisco_Role_newRoleSet_007.gif]]
+
 
+
Load the resources containing the meta-model extended by the
+
role set. To load a meta-model resource the user must use the "Load
+
meta-model resource" action.
+
 
+
[[Image:MoDisco_Role_newRoleSet_008.gif]]
+
 
+
In this example, we choose to use the Java meta-model.
+
 
+
[[Image:MoDisco_Role_newRoleSet_009.gif]]
+
 
+
Fill the "Extended package" field with the ePackages
+
containing the virtually extended meta-model.
+
 
+
[[Image:MoDisco_Role_newRoleSet_010.gif]]
+
 
+
Right click on the RoleSet element and choose the "New Child > Role"
+
action to create a role.
+
 
+
[[Image:MoDisco_Role_newRoleSet_011.gif]]
+
 
+
Set the role name and the class that the role will extend.
+
 
+
[[Image:MoDisco_Role_newRoleSet_012.gif]]
+
 
+
To specify how to know if an object conforms to a role, we have
+
to provide a boolean query. To provide this query we have to load the
+
model containing its description.
+
 
+
[[Image:MoDisco_Role_newRoleSet_013.gif]]
+
 
+
The query has to be referred to using the MoDisco protocol:
+
"modisco:/query/<querySetName>". In the example, we use the "My"
+
query set.
+
 
+
[[Image:MoDisco_Role_newRoleSet_014.gif]]
+
 
+
Once the query set resource is referenced, we just have to select the
+
query describing the role. In the example this query is named
+
"isAbstract".
+
 
+
[[Image:MoDisco_Role_newRoleSet_015.gif]]
+
 
+
At this step, if we save the model, the "red cross" should disappear
+
from the file icon. This means that the role set model is now valid.
+
 
+
[[Image:MoDisco_Role_newRoleSet_016.gif]]
+
 
+
If the role has specific attributes or references which can be
+
calculated, we can declare them. In this example, we will declare an
+
attribute indicating the number of abstract methods contained in the
+
abstract class. To create a new role attribute right-click on the role
+
element and select the "New Child > RoleAttribute" item.
+
 
+
[[Image:MoDisco_Role_newRoleSet_017.gif]]
+
 
+
The attribute's type and name must be set. The "Value Query" field must
+
be filled with a reference to a query which is used to calculate the
+
attribute's value. This query must have the same type as the attribute
+
and be applicable to the virtually extended class.
+
 
+
[[Image:MoDisco_Role_newRoleSet_018.gif]]
+
 
+
 
+
The role set is now ready to be used.
+
 
+
== How to consult the MoDisco role set catalog through the UI ==
+
 
+
If a role set model is valid, it is registered in the role set
+
catalog. To consult the role set catalog, we can use the "Role Set"
+
view.
+
 
+
To open this view select "Windows > Show view > Other ..."
+
in the menu bar and choose "Role Set" in the list.
+
 
+
[[Image:MoDisco_Role_newRoleSet_019.gif]]
+
[[Image:MoDisco_Role_newRoleSet_020.gif]]
+
 
+
The "Role set" view presents the available role sets and their
+
roles. For each role set the location of its description model is pointed out.
+
 
+
[[Image:MoDisco_Role_newRoleSet_021.gif]]
+
 
+
== How to programmatically use the MoDisco role set catalog ==
+
 
+
Here is an example of using the MoDisco role API. For more information please refer to the JavaDoc.
+
 
+
import org.eclipse.emf.ecore.EObject;
+
import org.eclipse.gmt.modisco.infra.query.core.exception.ModelQueryException;
+
import org.eclipse.gmt.modisco.infra.role.Role;
+
import org.eclipse.gmt.modisco.infra.role.RoleSet;
+
import org.eclipse.gmt.modisco.infra.role.core.RoleContext;
+
import org.eclipse.gmt.modisco.infra.role.core.RoleSetCatalog;
+
import org.eclipse.gmt.modisco.infra.role.core.exception.ModiscoRoleException;
+
+
public class Example {
+
+
public Integer getNbAbstractMethod(EObject eObject)
+
throws ModelQueryException, ModiscoRoleException {
+
RoleSet roleSet = RoleSetCatalog.getSingleton().getRoleSet("My");
+
RoleContext context = new RoleContext();
+
context.addRoleSet(roleSet);
+
Role role = roleSet.getRole("AbstractClassDeclaration");
+
if (context.isInstance(eObject, role)) {
+
Object object = context.get(eObject, role
+
.getEStructuralFeature("nbAbstractMethod"));
+
if (object instanceof Integer) {
+
Integer nbAbstractMethod = (Integer) object;
+
return nbAbstractMethod;
+
}
+
}
+
return null;
+
}
+
}
+
 
+
== Role Meta-model Description ==
+
 
+
[[Image:MoDisco_Role_metamodel.png]]
+
 
+
The role meta-model extends the ecore meta-model and uses the query meta-model.
+
 
+
A RoleSet is a kind of EPackage. A RoleSet contains roles through
+
the eClassifier reference. A role is a kind of EClass.
+
 
+
For a role instance, the eSuperType reference must be set to
+
specify which class the role virtually extends.
+
 
+
The role class has one specific reference: conditionQuery. The
+
conditionQuery reference points to the ModelQuery class. The model queries
+
pointed to by the conditionQuery reference must return a Boolean. Those
+
queries are used to specify how to decide whether an instance conforms to a
+
role. If the conditionQuery is empty then all the instances of the class
+
referred to by the role instance through the eSuperType reference conform
+
to this role.
+
 
+
A role contains roleAttributes and roleReferences through the
+
eStructuralFeature reference. The RoleAttribute and RoleReference
+
classes have a common super class: RoleStructuralFeature. The
+
RoleStructuralFeature has one reference named valueQuery pointing to
+
the ModelQuery class. The valueQuery is used to compute the role
+
structural feature value. The roleAttribute and roleReference must have
+
the same type as the query they refer to.
+
 
+
[[Category:MoDisco]]
+

Latest revision as of 11:37, 2 April 2012

  1. REDIRECT MoDisco/Moved To Help Center