==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.

<pre>
import org.eclipse.emf.ecore.EObject;
import org.eclipse.modisco.infra.query.ModelQuery;
import org.eclipse.modisco.infra.query.ModelQuerySet;
import org.eclipse.modisco.infra.query.core.AbstractModelQuery;
import org.eclipse.modisco.infra.query.core.ModelQuerySetCatalog;
import org.eclipse.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 in 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();
  }
}
</pre>

== 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 in the query set's project). The extension point to use is: org.eclipse.modisco.infra.query.registration.
Here is an example of a query set declaration:
  <plugin>
     <extension
           point="org.eclipse.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 as a plug-in.


==Query Meta-model Description==

[[Image:../../img/query_manager/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.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.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.
