To avoid typical errors while defining ontology contributions to model browser follow the following check list: ## Step 1: Ontology Plug-in Define an ontology plugin (`org.mylib.ontology`). Define dependencies from Simantics plugins in MANIFEST.MF/Dependencies/Required Plug-ins: ``` org.simantics.layer0 org.simantics.modeling.ontology org.simantics.viewpoint.ontology org.simantics.action.ontology ``` Include the following definitions into your ontology file (*.pgraph): ``` L0 = VP = ACT = MOD = ``` Define a new library (www.mylib.org) for your ontology under Simantics database root (*http://*): ``` MY_LIB = : L0.Library @L0.new ``` Define your ontology under the library and specify its ResourceClass: ``` MY_ONTOLOGY = : L0.Ontology @L0.new L0.HasResourceClass "org.mylib.MyOntologyResource" : L0.String ``` Check the Name property of ontology plugin in MANIFEST.MF/Overview/General Information. It has to match with URI (without version number) of your ontology. ``` Name: http://www.mylib.org/MyOntology ``` Export the package (org.mylib) of ResourceClass in MANIFEST.MF/Runtime/Exported Packages. Define a new context and include it into MOD.ModelingActionContext ``` MY_AC = MY_ONTOLOGY.MyActionContext : VP.BrowseContext VP.BrowseContext.IsIncludedIn MOD.ModelingActionContext ``` Define a new ActionContribution for each action in this context ``` MY_AC VP.BrowseContext.HasActionContribution _ : VP.ActionContribution L0.HasLabel "My action..." VP.ActionContribution.HasAction MY_ONTOLOGY.MyAction : ACT.Action VP.ActionContribution.HasNodeType L0.Entity ``` ## Step 2: Implementation Plug-in Define a plugin for implementation (org.mylib). Options: Generate an activator=checked, This plug-in will make contributions to the UI=checked. Define dependencies from Simantics plugins in *MANIFEST.MF/Dependencies/Required Plug-ins* ``` org.simantics.db.layer0 ``` Define a new package `src/org.mylib.actions`. Define a new Java class `MyAction.java` under `org.mylib.actions` package ```java package org.mylib.actions; import org.simantics.db.layer0.adapter.ActionFactory; import org.simantics.db.Resource; public class MyAction implements ActionFactory { @Override public Runnable create(Object target) { if (!(target instanceof Resource)) return null; final Resource res = (Resource) target; return new Runnable() { @Override public void run() { // TODO: put your code here } }; } } ``` Create a new file (`adapters.xml`, [see spec](../Database/ResourceAdaptation.md)) under implementation plugin to map URI (*unversioned*) of your action to Java class implementation. The content of the file is as follows: ```xml ``` You can check correctness of URI by Graph Debugger to search a resource: ``` http://www.mylib.org/MyOntology-1.0/MyAction ``` Note! Use *versioned URI* (0.0 -> 1.0) while searching with Graph Debugger. Include `adapters.xml` into build configuration in *MANIFEST.MF/Build/Binary Build*. Also, include SCL packages and SCL modules if your use them in your implementation. Export the implementation package (`org.mylib.actions`) of MyAction.java in *MANIFEST.MF/Runtime/Exported Packages*. ## Step 3: Product Include the ontology and the implementation plug-ins into your product configuration (Debug Configurations/Plug-ins) and validate Plug-ins dependencies before running the product.