blob: 354a9c32412afb3057fef9c571da61a8bd509725 [file] [log] [blame]
==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.