Skip to main content
Jump to: navigation, search

Difference between revisions of "MoDisco/Components/QueryManager/Documentation/0.8"

Line 4: Line 4:
 
The first step is to [[MoDisco/ProjectNature|create a MoDisco project]].
 
The first step is to [[MoDisco/ProjectNature|create a MoDisco project]].
  
Right-click on the MoDisco project and select the "New > Other ..." button.
+
Then right-click on the MoDisco project and select '''New > Other ...'''.
  
[[Image:NewModelQuerySet001.png]]
+
[[Image:MoDisco_Facet_NewOther.png|500px]]
  
Select "QuerySet Model" and press the "Next" button
+
Select '''QuerySet Model''' and press the '''Next''' button
  
[[Image:MoDisco_Query_newModelQuerySet_002.png]]
+
[[Image:MoDisco_NewQuerySetWizard.png]]
  
Choose a name for your model query set (My.querySet in the
+
Choose a name for your model query set (''My.querySet'' in the
example) and press "Finish".
+
example) and press '''Finish'''.
  
[[Image:MoDisco_Query_newModelQuerySet_003.png]]
+
[[Image:MoDisco_NewQuerySetWizard_Name.png]]
  
 
Open the "My.querySet" file and open the "Properties View"
 
Open the "My.querySet" file and open the "Properties View"
  
[[Image:MoDisco_Query_newModelQuerySet_006.png]]
+
Set the description of the query set and make sure that the query
 
+
Set the description of the query set and take care that the query
+
 
set name is the same as the containing file name ("My" in the
 
set name is the same as the containing file name ("My" in the
 
example).
 
example).
  
[[Image:MoDisco_Query_newModelQuerySet_007.png]]
+
[[Image:MoDisco_QuerySetProperties.png]]
  
 
Load the resources containing the meta-models used by the model
 
Load the resources containing the meta-models used by the model
 
queries that will be owned by the query set. To load a meta-model
 
queries that will be owned by the query set. To load a meta-model
resource use the "Load meta-model resource" action.
+
resource use the '''Load meta-model resource''' action.
  
[[Image:MoDisco_Query_newModelQuerySet_008.png]]
+
[[Image:MoDisco_Query_LoadMetamodelResource.png]]
  
 
In this example, we choose to use the KDM meta-model.
 
In this example, we choose to use the KDM meta-model.
  
[[Image:MoDisco_Query_newModelQuerySet_009.png]]
+
[[Image:MoDisco_Query_Package_Selection_KDM.png]]
  
 
Fill the "Associated Metamodels" field with the ePackages
 
Fill the "Associated Metamodels" field with the ePackages
Line 41: Line 39:
 
by the query set.
 
by the query set.
  
[[Image:MoDisco_Query_newModelQuerySet_010.png]]
+
[[Image:MoDisco_Query_Properties_AssociatedMetamodels.png]]
  
 
In this example we use the "core" package.
 
In this example we use the "core" package.
  
[[Image:MoDisco_Query_newModelQuerySet_011.png]]
+
[[Image:MoDisco_Query_Associated_Metamodels_Core.png]]
  
Right click on the ModelQuerySet element and choose the "New Child >
+
Right click on the ModelQuerySet element and choose the '''New Child >
Java Model Query" action to create a "Java Model Query".
+
Java Model Query''' action to create a "Java Model Query".
  
[[Image:MoDisco_Query_newModelQuerySet_012.png]]
+
[[Image:MoDisco_Query_NewChild_JavaModelQuery.png]]
  
 
Set the name, the description and the return type of the query.
 
Set the name, the description and the return type of the query.
Line 56: Line 54:
 
class that will contain the query's Java implementation.
 
class that will contain the query's Java implementation.
  
[[Image:MoDisco_Query_newModelQuerySet_013.png]]
+
[[Image:MoDisco_Query_JavaModelQuery_Properties.png]]
  
 
Fill the "Scope" field with the meta-class to which the query will be
 
Fill the "Scope" field with the meta-class to which the query will be
Line 105: Line 103:
  
 
<source lang="java">
 
<source lang="java">
 +
import org.eclipse.emf.ecore.EObject;
 +
import org.eclipse.gmt.modisco.infra.query.ModelQuery;
 +
import org.eclipse.gmt.modisco.infra.query.ModelQuerySet;
 +
import org.eclipse.gmt.modisco.infra.query.core.AbstractModelQuery;
 +
import org.eclipse.gmt.modisco.infra.query.core.ModelQuerySetCatalog;
 +
import org.eclipse.gmt.modisco.infra.query.runtime.ModelQueryResult;
  
import org.eclipse.emf.ecore.EObject;
+
public class Example {
import org.eclipse.gmt.modisco.infra.query.ModelQuery;
+
  public Integer main(EObject context) throws Exception {
import org.eclipse.gmt.modisco.infra.query.ModelQuerySet;
+
      //Get the model query set catalog.
import org.eclipse.gmt.modisco.infra.query.core.AbstractModelQuery;
+
    ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();  
import org.eclipse.gmt.modisco.infra.query.core.ModelQuerySetCatalog;
+
    //Get the query set named "My".
import org.eclipse.gmt.modisco.infra.query.runtime.ModelQueryResult;
+
    ModelQuerySet modelQuerySet = catalog.getModelQuerySet("My");
public class Example {
+
    //Select into the "My" query set a query named "myQuery".
+
    //modelQueryDescription is a model element.
public Integer main(EObject context) throws Exception {
+
    ModelQuery modelQueryDescription = null;
  //Get the model query set catalog.
+
    for (ModelQuery modelQuery : modelQuerySet.getQueries()) {
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();  
+
      if (modelQuery.getName().equals("myQuery")) {
//Get the query set named "My".
+
        modelQueryDescription = modelQuery;
ModelQuerySet modelQuerySet = catalog.getModelQuerySet("My");
+
        break;
//Select into the "My" query set a query named "myQuery".
+
      }
//modelQueryDescription is a model element.
+
    }
ModelQuery modelQueryDescription = null;
+
    if (modelQueryDescription == null) {
for (ModelQuery modelQuery : modelQuerySet.getQueries()) {
+
      throw new Exception();
if (modelQuery.getName().equals("myQuery")) {
+
    }
modelQueryDescription = modelQuery;
+
    //Get a java instance of the querySet
break;
+
    AbstractModelQuery myModelQuery = catalog
}
+
        .getModelQueryImpl(modelQueryDescription);
}
+
    //the model query set evaluation
if (modelQueryDescription == null) {
+
    ModelQueryResult result = myModelQuery.evaluate(context);
throw new Exception();
+
    if (result.getException() != null) {
}
+
      throw new Exception();
//Get a java instance of the querySet
+
    }
AbstractModelQuery myModelQuery = catalog
+
    return (Integer) result.getValue();
.getModelQueryImpl(modelQueryDescription);
+
  }
//the model query set evaluation
+
}
ModelQueryResult result = myModelQuery.evaluate(context);
+
if (result.getException() != null) {
+
throw new Exception();
+
}
+
return (Integer) result.getValue();
+
}
+
}
+
 
</source>
 
</source>
  

Revision as of 04:24, 4 May 2010

MoDisco
Website
Download
Community
Mailing ListForums
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse SourceProject Set File

How to create a MoDisco query set

The first step is to create a MoDisco project.

Then right-click on the MoDisco project and select New > Other ....

MoDisco Facet NewOther.png

Select QuerySet Model and press the Next button

MoDisco NewQuerySetWizard.png

Choose a name for your model query set (My.querySet in the example) and press Finish.

MoDisco NewQuerySetWizard Name.png

Open the "My.querySet" file and open the "Properties View"

Set the description of the query set and make sure that the query set name is the same as the containing file name ("My" in the example).

MoDisco QuerySetProperties.png

Load the resources containing the meta-models used by the model queries that will be owned by the query set. To load a meta-model resource use the Load meta-model resource action.

MoDisco Query LoadMetamodelResource.png

In this example, we choose to use the KDM meta-model.

MoDisco Query Package Selection KDM.png

Fill the "Associated Metamodels" field with the ePackages containing the meta-models used by the model queries that will be owned by the query set.

MoDisco Query Properties AssociatedMetamodels.png

In this example we use the "core" package.

MoDisco Query Associated Metamodels Core.png

Right click on the ModelQuerySet element and choose the New Child > Java Model Query action to create a "Java Model Query".

MoDisco Query NewChild JavaModelQuery.png

Set the name, the description and the return type of the query. Set the "Implementation Class Name" field with the qualified name of the class that will contain the query's Java implementation.

MoDisco Query JavaModelQuery Properties.png

Fill the "Scope" field with the meta-class to which the query will be applicable.

MoDisco Query newModelQuerySet 014.png MoDisco Query newModelQuerySet 015.png MoDisco Query newModelQuerySet 016.png

Create the query's implementation class.

MoDisco Query newModelQuerySet 017.png

A MoDisco project is also a "Plug-in project". To be able to refer to the API of the used meta-model, we have to add the "org.eclipse.gmt.modisco.infra.query.core" plug-in and the meta-model implementation plug-in in the plug-in dependencies.

MoDisco Query newModelQuerySet 020 1.png

The Java Query implementation class must implement org.eclipse.gmt.modisco.query.core.java.IJavaModelQuery.

MoDisco Query newModelQuerySet 018.png MoDisco Query newModelQuerySet 020.png MoDisco Query newModelQuerySet 021.png

How to consult the MoDisco query set catalog through the UI

If a query set model is valid, it is registered in the model query set catalog. To consult the model query set catalog, we can use the "Model Query Set" view.

To get this view select "Windows > Show view > Other ..." in the menu bar and choose "Query Set" in the list.

MoDisco Query newModelQuerySet 022.png MoDisco Query newModelQuerySet 023.png

The "Query set" view presents the available query sets and their queries. For each query, the description model location is pointed out.

MoDisco Query newModelQuerySet 024.png

How to programmatically use the MoDisco query set catalog.

Here a MoDisco query API example is provided. For more information please refer to the JavaDoc.


import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmt.modisco.infra.query.ModelQuery;
import org.eclipse.gmt.modisco.infra.query.ModelQuerySet;
import org.eclipse.gmt.modisco.infra.query.core.AbstractModelQuery;
import org.eclipse.gmt.modisco.infra.query.core.ModelQuerySetCatalog;
import org.eclipse.gmt.modisco.infra.query.runtime.ModelQueryResult;
 
public class Example {
  public Integer main(EObject context) throws Exception {
      //Get the model query set catalog.
    ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton(); 
    //Get the query set named "My".
    ModelQuerySet modelQuerySet = catalog.getModelQuerySet("My");
    //Select into the "My" query set a query named "myQuery".
    //modelQueryDescription is a model element.
    ModelQuery modelQueryDescription = null;
    for (ModelQuery modelQuery : modelQuerySet.getQueries()) {
      if (modelQuery.getName().equals("myQuery")) {
        modelQueryDescription = modelQuery;
        break;
      }
    }
    if (modelQueryDescription == null) {
      throw new Exception();
    }
    //Get a java instance of the querySet
    AbstractModelQuery myModelQuery = catalog
        .getModelQueryImpl(modelQueryDescription);
    //the model query set evaluation
    ModelQueryResult result = myModelQuery.evaluate(context);
    if (result.getException() != null) {
      throw new Exception();
    }
    return (Integer) result.getValue();
  }
}

How to package a query set in a plug-in

To package a query set in a plug-in, an extension must be added in the file plugin.xml (contained by the query set’s project). The extension point to use is: org.eclipse.gmt.modisco.infra.query.registration. Here is an example of query set declaration:

 <plugin>
    <extension
          point="org.eclipse.gmt.modisco.infra.query.registration">
       <modelqueryset
             file="_example_jdkAndEclipseQuerySet.querySet">
       </modelqueryset>
    </extension>
 </plugin>

Thanks to this extension declaration, The MoDisco project is ready to be exported has a plug-in.


Query Meta-model Description

MoDisco Query Metamodel.png

ModelQuerySet is the root of the query model. One root per query model is expected.

ModelQuerySet::name must be unique (in the Eclipse platform) and equal to the containing file name. We recommend to use a name prefix with a namespace, for example: org.eclipse.gmt.modisco.example1.querySet1.

ModelQuerySet::isEditable is true if the query can be edited. If the query is stored into a compiled file then ModelQuerySet::isEditable is false.

ModelQuerySet::getQuery(EString) returns the contained ModelQuery having the requested name.

ModelQuerySet::associatedMetamodels points to the meta-models used by the contained queries.

ModelQuerySet::queries refers to the contained queries.

ModelQuery is an abstract class representing a query.

ModelQuery::name is the query name. In each query set the query names must be unique.

ModelQuery::parameters a set of ModelQueryParameter instances describing the query parameters.

ModelQuery::returnType is an ecore::DataType representing the query return type.

ModelQuery::scope is the set of types on which the query is applicable. Those types are represented by ecore::DataType instances.

ModelQueryParameter is a class representing the query parameters.

ModelQueryParameter::type is an ecore::DataType representing the query parameter type.

ModelQueryParameter::name is the parameter name. In each query the parameter names must be unique.

ModelQuery::isExternalContextDependent must be true if two evaluations of the same query with the same context and parameters can return different results.

JavaModelQuery is a sub class of ModelQuery which points to a Java implemented query.

JavaModelQuery::implemenationClassName contains the qualified name of the class implementing the query. This class must be a sub class of org.eclipse.gmt.modisco.infra.query.core.java.IJavaModelQuery. The Java implementation class must be stored in the same plug-in (or plug-in project) as the query model.

OCLModelQuery::query is the OCL query string.


JXPath Queries

JXPath Meta-model Extension Description

JXPath Query Meta-model Extension

A JXPathModelQuery is a ModelQuery describing a JXPath expression.

The JXPath expressions are stored into the JXPathModelQuery::query attribure.

Example

The jxpathQueryTest.querySet model provides an example of a JXPath query. The JXPathQuery stored into jxpathQueryTest.querySet returns the name of the EPackage passed in the query context.

How to log in a Java query

If you want to log errors or messages in a Java query, you can use the MoDisco logger, like this (where Activator is the class that is already generated by default in your MoDisco project):

  • To log an error message:
MoDiscoLogger.logError("Error message", Activator.getDefault());
  • To log an exception:
MoDiscoLogger.logError(exception, Activator.getDefault());
  • To log an information message:
MoDiscoLogger.logInfo("Error message", Activator.getDefault());
  • ... (see also the other methods on MoDiscoLogger)

Back to the top