Model Browser Contributions
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.ontologyInclude the following definitions into your ontology file (*.pgraph):
L0 = <http://www.simantics.org/Layer0-1.1>
VP = <http://www.simantics.org/Viewpoint-1.2>
ACT = <http://www.simantics.org/Action-1.1>
MOD = <http://www.simantics.org/Modeling-1.2>Define a new library (www.mylib.org) for your ontology under Simantics database root (http://):
MY_LIB = <http://www.mylib.org> : L0.Library
@L0.newDefine your ontology under the library and specify its ResourceClass:
MY_ONTOLOGY = <http://www.mylib.org/MyOntology-1.0> : L0.Ontology
@L0.new
L0.HasResourceClass "org.mylib.MyOntologyResource" : L0.StringCheck 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/MyOntologyExport 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.ModelingActionContextDefine 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.EntityStep 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.layer0Define a new package src/org.mylib.actions.
Define a new Java class MyAction.java under org.mylib.actions package
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) under implementation plugin to map URI (unversioned) of your action to Java class implementation. The content of the file is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<adapters>
<target interface="org.simantics.db.layer0.adapter.ActionFactory">
<resource
uri="http://www.mylib.org/MyOntology-0.0/MyAction"
class="org.mylib.actions.MyAction" />
</target>
</adapters>You can check correctness of URI by Graph Debugger to search a resource:
http://www.mylib.org/MyOntology-1.0/MyActionNote! 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.