The Generic Eclipse Modeling System (GEMS) is a configurable toolkit for creating domain-specific modeling and program synthesis environments for Eclipse. The configuration is accomplished through metamodels specifying the modeling paradigm (modeling language) of the application domain. The modeling paradigm contains all the syntactic, semantic, and presentation information regarding the domain; which concepts will be used to construct models, what relationships may exist among those concepts, how the concepts may be organized and viewed by the modeler, and rules governing the construction of models. The modeling paradigm defines the family of models that can be created using the resultant modeling environment.
The built-in metamodeling language is based on the UML class diagram notation. Metamodels in other E-core readable formats can be used as well. Metamodel constraints are specified in Java. Once a metamodel has been imported, an interpreter is run that traverses the model and generates an Eclipse plug-in for editing instances of the Domain Specific Modeling Language (DSML) described by the metamodel. The generated plug-in uses Eclipse's Graphical Editing Framework (GEF) and Draw2D plug-in to visualize the DSML as a diagram. Instances of the DSML may also have interpreters run on them to generate various artifacts or perform complex analyses.
GEMS EMF Intelligence
GEMS EMF Intelligence is a framework for reasoning across one or more models using your choice of constraint languages. GEMS EMF Intelligence allows you to assert modeling elements into a knowledge base and to associate constraints with relationships between model elements. Once elements and constraints are asserted into the knowledge base, GEMS EMF Intelligence can be used to derive valid endpoints for the relationships between model elements. The GEMS EMF Intelligence framework can reason across multiple EMF models by merely asserting them into the same knowledge base.
Currently, GEMS EMF Intelligence supports OCL, Prolog, BeanShell, Java, and Groovy constraints. The framework can easily be extended (only one interface with one method needs to be implemented) to include other constraint languages. The framework can also reason across a mix (or just) plain java objects with minimal effort.