Frequently Asked Questions

Here are some common questions about XGEE.

XGEE

Status Indicator

For my rectangle, I want to have a small status indicator (like a red/green light) in the corner to show information about a certain attribute.

Use a StaticSubVertex for this and make it conditional. The condition can be any expression that evaluates to true/false. So if you want to show multiple states, copy and paste your StaticSubVertex and make each one conditional on a different attribute value.

Details about the options of e.g. Vertex

Where can I find detailed documentation about the options of e.g. Vertex, Edge, StaticEdge, etc.?

Documentation about the classes is directly inside the editorModel metamodel. When in Eclipse, select the “Documentation” tab when having selected a class in the editorModel. For your convenience, you find the very same information in the section EPackage editor of this documentation. For example, see EClass Vertex for detailed documentation of options of a Vertex.

Static Edge

Can I have a static edge that does not represent a model element?

No, at present, every edge must represent a model element.

Arrowheads

Can I change the style of the end of an edge to an arrowhead?

No, at present, XGEE does not support edge ending styles. You might find a workaround by using a EClass StaticSubVertex at the target vertex.

Complex Shapes

Can I create complex shapes (e.g., a star or a custom polygon) for vertices?

You can use almost any possible SVG or PNG when using a EClass ShapeFromResource. Alternatively, you can build complex shapes by adding to a Vertex multiple EClass StaticSubVertex.

Developing Queries

How can I develop and debug EOQ queries for XGEE?

We recommend to first get a basic understanding of EOQ using the EOQ manual. Then develop your individual queries using the developer console EOQ2 Developer Console or EOQ3 Developer Console in jseoq/Examples/Eoq3/jseoqdeveloperinterface.html Once the query works as expected, copy and paste it into your editorModel. Keep in mind that while in the developer console you need the full query GET #5699/name, in XGEE the queryTarget (e.g. PARENT) will do the GET #5699 part while the queryStr gets the /name part.

Have the your browser’s developer tools console open to see possible error messages. Refresh often such that you immediately see potential errors after changing the query.

Class-specific Vertices

Can I have different vertex shapes for different classes?

XGEE is strictly query based. So all results of your queryStr will be visualized. However, you can filter for specific classes in your queryStr. EOQ2: {@CLASS/name=’Task’} EOQ3: {(/*M2CLASS/*NAME=’Task’)

Shape depending on feature values

Can I have different vertex shapes depending on feature values?

See ‘Class-specific Vertices’ above. You can filter for everything you want in your queryStr. Try to have disjunct filters that in sum cover all possible cases. Typically you neither want an object visualized twice nor not at all.

Difference EOQ2 vs. EOQ3 XGEE

What is the difference between EOQ2 XGEE and EOQ3 XGEE?

EOQ2 XGEE is based on EOQ version 2. It is stable and has been used in production for several years.

EOQ3 XGEE is based on EOQ version 3. Currently it only allows to visualize static models. Dynamic features such as live updates on model changes or editing model elements are not yet supported. It furthermore does not yet provide a tree view. Also storing layout information is not yet supported in EOQ3 XGEE. Despite the current limitations, EOQ3 XGEE provides tremendous improvements. EOQ3 allows much more precise and short queries that simplify debugging and development of editorModels.

XGEE not reflecting size changes

When changing the sizeX of a Vertex, it is not reflected in XGEE.

First check ‘Browser not reflecting changes’ above. Then check the attributes. sizeX is only strict if both autoSize and isResizable are false. autoSize enlarges the vertex to fit all its subvertices while isResizable allows the user to resize the vertex manually. EOQ2 only: delete the .layout file and restart XGEE.

Where can I get EOQ3 XGEE?

EOQ3 XGEE is currently in an early access phase. If you are interested to get access, please contact us via andreas.waldvogel@ils.uni-stuttgart.de

How do I report a bug?

If you encounter any issues, please report them on our GitLab repository. When reporting a bug, please include as much detail as possible to help us reproduce the issue.

Understanding Identifiers

What are the different IDs used in XGEE and how should I name them?

Plugin ID

The plugin folder name, identical in plugin.js - meta.id

  • Example: editor.oaam.functions

  • Purpose: Used for plugin loading in index.html

  • Best Practices: Keep it globally unique and stable using reverse-domain style (e.g., editor.<domain>.<feature>).

editorModel Editor id

The id attribute of the Editor in the .editorModel.

  • Example: oaam-functions

  • Purpose: Used for namespacing CSS styles for the editor tab (e.g., xgee-graph-view-<id>).

  • Best Practices: Use unique, CSS-safe names (lowercase, hyphenated, no dots).

editorModel DisplayableObject id

The id attribute of every DisplayableObject in the .editorModel.

  • Example: task, signal, taskinput

  • Purpose: Mostly provides metadata and context for debugging in the current implementation.

  • Best Practices: Use meaningful names and prefer uniqueness within an editor model, even if not strictly enforced by the runtime. Neglect during fast prototyping.

Edge Anchor attachment behavior

I have multiple DisplayableObject of the same EOQ ID. How does an Edge Anchor decide where to attach to?

Anchor resolution uses the anchor query result EOQ ID, finds matching DisplayableObject, prefers Vertex over StaticVertex, and takes the first match. If that chosen vertex has StaticSubVertex children, attachment may snap to the closest side-matching static subvertex (attach-dependent); otherwise it stays on the parent vertex. Related: XGEE Issue 35

Edge Labels

Can Edge have Label?

As visible in the class diagram, an Edge cannot have a label. A common workaround is to add an unvisible container with an unvisible StaticSubVertex. This StaticSubVertex can then have a label.

Multiple Editors for same class

Can I have multiple editors for the same class?

No. There is a one-to-many relationship between editor and classes. So you can model multiple Editor.refersTo (popular for Functions, Subfunctions). But you cannot have multiple Editors referring to the same class. A typical workaround is to refer to a class close in the hierarchy and the have slightly different queries.

EOQ3: can I visualize any EOQ3-CONCEPT?

You can use everything possible in EOQ3 in your queries, however the result for Vertices and Edges must be an M1OBJECT.

Environment

Browser not reflecting changes

It looks like I changed something in the editorModel, but XGEE does not reflect the change.

Browsers are very eager to cache resources such that they load faster. Have the browser’s developer tools open and enable “Disable Cache” (usually in the Network tab).

Browser shortcuts do not work

When I try to use browser shortcuts in XGEE, they do not work.

When your focus (last click) is inside the modeling canvas, the browser shortcuts are disabled. Click somewhere outside the canvas (e.g. on a tab) and the usual browser shortcuts work again.

Recommendations metamodel and usermodel

Are there general “rules”/recommendations for designing the metamodel and usermodel?

Yes, we recommend to follow these guidelines (deviations can make sense if well thought through):

  • File Name: strictly use the file ending to link you usermodel to the metamodel. E.g. oaam.ecore, myModel.oaam.

  • Root Element / Spanning Tree: in the metamodel have one root class that contains all other non-abstract classes directly or indirectly (inheritance) via containment references. Test this in Eclipse by creating an instance. If you can instantiate all non-abstract classes, you are good.

EOQ3: check model loaded

How can I check that my model is correctly loaded in EOQ3 XGEE?

In the developer web interface, run this query:

GET (/*M1MODELS*:l0/*OBJECTS*:l0/resources*/content)

The results should show all root elements of all usermodels. A n0 indicates that the model is not loaded.

EOQ3: strange behavior when serializing models

When I serialize an M1 user model in EOQ3, I get a strange `<xmi:XMI> ` as root object, not my intended root object.

You very likely have multiple root objects in your M1MODEL. Root objects are those that are not contained by any other object. A typical word for accidental root object is “orphan”. Make sure that you have a single root object that contains all other objects directly or indirectly via M1COMPOSITION. In other words: Make sure that your model is a spanning tree. You can check the containment hierarchy with `@ALLPARENTS`.

Strange behavior when parallely working on local and remote XGEE

When I work on a local XGEE and a remote XGEE in parallel, I see strange behavior. Files are not shown as expected.

Avoid working on the local and remote XGEE in parallel. Things might get mixed up.