diff --git a/index.html b/index.html
index 2e942e8..95f3b8f 100644
--- a/index.html
+++ b/index.html
@@ -797,7 +797,7 @@
 </pre></div>
 
 
-<p>You can also read the code through your browser from the <a href="https://git.eclipse.org/c/hawk/hawk.git/">Git-web interface</a>.</p>
+<p>You can also read the code through your browser from the <a href="https://git.eclipse.org/c/hawk/hawk.git/">Git-web interface</a> (simpler), or from the <a href="https://git.eclipse.org/r/plugins/gitiles/hawk/hawk/+/master">Gitiles interface</a> (which allows for archive downloads).</p>
                 
                   
                 
diff --git a/search/search_index.json b/search/search_index.json
index f1a4bd7..3793f41 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Eclipse Hawk \u00b6 Eclipse Hawk is a model indexing solution that can take models written with various technologies and turn them into graphs, for easier and faster querying. Hawk is licensed under the Eclipse Public License 2.0 , with the GNU GPL 3.0 as secondary license. Any questions? Check the other sections on the left for how to get started and use Hawk. If you cannot find an answer there, feel free to ask at the official forum in Eclipse.org . Interim downloads (1.2.0) \u00b6 Interim versions of the core components of Hawk 1.2.0 and the OrientDB / Greycat backends can be installed from this Eclipse update site: https://download.eclipse.org/hawk/1.2.0/updates/ There are Apache Thrift client libraries targeting Java, JavaScript and C++ for talking with a Hawk server. The Java library is available under plugins-server , in the api project. The other libraries are available from these links: C++ JavaScript Prebuilt command-line client and server products for Linux, MacOS and Windows are available from the 1.2.0 downloads folder . Source code \u00b6 To access the source code, clone the Git repository for Hawk with your preferred client from: git://git.eclipse.org/gitroot/hawk/hawk.git Committers will use a different URL: ssh://user_id@git.eclipse.org:29418/hawk/hawk You can also read the code through your browser from the Git-web interface .","title":"Home"},{"location":"#eclipse-hawk","text":"Eclipse Hawk is a model indexing solution that can take models written with various technologies and turn them into graphs, for easier and faster querying. Hawk is licensed under the Eclipse Public License 2.0 , with the GNU GPL 3.0 as secondary license. Any questions? Check the other sections on the left for how to get started and use Hawk. If you cannot find an answer there, feel free to ask at the official forum in Eclipse.org .","title":"Eclipse Hawk"},{"location":"#interim-downloads-120","text":"Interim versions of the core components of Hawk 1.2.0 and the OrientDB / Greycat backends can be installed from this Eclipse update site: https://download.eclipse.org/hawk/1.2.0/updates/ There are Apache Thrift client libraries targeting Java, JavaScript and C++ for talking with a Hawk server. The Java library is available under plugins-server , in the api project. The other libraries are available from these links: C++ JavaScript Prebuilt command-line client and server products for Linux, MacOS and Windows are available from the 1.2.0 downloads folder .","title":"Interim downloads (1.2.0)"},{"location":"#source-code","text":"To access the source code, clone the Git repository for Hawk with your preferred client from: git://git.eclipse.org/gitroot/hawk/hawk.git Committers will use a different URL: ssh://user_id@git.eclipse.org:29418/hawk/hawk You can also read the code through your browser from the Git-web interface .","title":"Source code"},{"location":"additional-resources/","text":"Screencasts \u00b6 We have several screencasts that show how to use Hawk and work on its code: Running of basic operations Use of advanced features Download and configuration of Hawk onto a fresh Eclipse Luna (Modeling Tools) distribution How to use Hawk to add Modelio metamodel(s) Use Hawk Server to auto-configure & start Hawk Instances Papers \u00b6 Hawk: towards a scalable model indexing architecture A Framework to Benchmark NoSQL Data Stores for Large-Scale Model Persistence Towards Scalable Querying of Large-Scale Models Evaluation of Contemporary Graph Databases for Efficient Persistence of Large-Scale Models Towards Incremental Updates in Large-Scale Model Indexes Towards Scalable Model Indexing (PhD Thesis) Stress-testing remote model querying APIs for relational and graph-based stores Integration of a graph-based model indexer in commercial modelling tools Integration of Hawk for Model Metrics into the MEASURE Platform Hawk solutions to the TTC 2018 Social Media Case Scaling-up domain-specific modelling languages through modularity services Book chapter: Monitoring model analytics over large repositories with Hawk and MEASURE Slides \u00b6 Hawk: indexado de modelos en bases de datos NoSQL - 90 minute slides in Spanish about the MONDO project and Hawk MODELS18 tutorial on NeoEMF and Hawk Related tools \u00b6 The HawkQuery SMM MEASURE library allows using Hawk servers as metric providers for the MEASURE platform.","title":"Additional resources"},{"location":"additional-resources/#screencasts","text":"We have several screencasts that show how to use Hawk and work on its code: Running of basic operations Use of advanced features Download and configuration of Hawk onto a fresh Eclipse Luna (Modeling Tools) distribution How to use Hawk to add Modelio metamodel(s) Use Hawk Server to auto-configure & start Hawk Instances","title":"Screencasts"},{"location":"additional-resources/#papers","text":"Hawk: towards a scalable model indexing architecture A Framework to Benchmark NoSQL Data Stores for Large-Scale Model Persistence Towards Scalable Querying of Large-Scale Models Evaluation of Contemporary Graph Databases for Efficient Persistence of Large-Scale Models Towards Incremental Updates in Large-Scale Model Indexes Towards Scalable Model Indexing (PhD Thesis) Stress-testing remote model querying APIs for relational and graph-based stores Integration of a graph-based model indexer in commercial modelling tools Integration of Hawk for Model Metrics into the MEASURE Platform Hawk solutions to the TTC 2018 Social Media Case Scaling-up domain-specific modelling languages through modularity services Book chapter: Monitoring model analytics over large repositories with Hawk and MEASURE","title":"Papers"},{"location":"additional-resources/#slides","text":"Hawk: indexado de modelos en bases de datos NoSQL - 90 minute slides in Spanish about the MONDO project and Hawk MODELS18 tutorial on NeoEMF and Hawk","title":"Slides"},{"location":"additional-resources/#related-tools","text":"The HawkQuery SMM MEASURE library allows using Hawk servers as metric providers for the MEASURE platform.","title":"Related tools"},{"location":"advanced-use/advanced-props/","text":"When querying through EOL, we can access several extra properties on any model element: eContainer : returns the model element that contains this one, or null if it does not have a container. eContents : collection with all the model elements contained within this one. hawkFile : string with the repository paths of the files that this model element belongs to, separated by \";\". hawkFiles : collection with the repository paths of all the files that this model element belongs to. hawkIn : collection with all the model elements accessible through incoming references. hawkInEdges : collection with all the incoming references (see their attributes below). hawkOut : collection with all the model elements accessible through outgoing references. hawkOutEdges : collection with all the outgoing references (see their attributes below). hawkRepo : string with the URLs of the repositories that this model element belongs to, separated by \";\". hawkRepos : collection with all the repositories that this model element belongs to. hawkURIFragment : URI fragment of the model element within its file. There is also the isContainedWithin(repo, path) method for checking if an element is directly or indirectly contained within a certain file. References are wrapped into entities of their own, with the following attributes: edge : raw edge, without wrapping. type / name : name of the reference. source / startNode : source of the reference. target / endNode : target of the reference.","title":"Advanced properties"},{"location":"advanced-use/graph-as-emf/","text":"In addition to regular querying, it is possible to use a Hawk graph as a model itself. To do so, use the \"File > New > Other > Hawk > Local Hawk Model Descriptor\" wizard and select the Hawk instance you want to access as a model. Once the wizard is finished, open the .localhawkmodel file to browse through it as an EMF model. You will need to ensure that the EPackages of the indexed models are part of your EMF package registry: normally Hawk should ensure this happens. For a Hawk index containing the GraBaTs 2009 set0.xmi file, it will look like this: The actual editor is a customized version of the Epsilon Exeed editor, which is based on the standard EMF reflective tree-based editor. The contents of the graph are navigated lazily, so we can open huge models very quickly and navigate through them. The editor also provides additional \"Custom\" actions when we right click on a top-level node (usually labelled with URLs). Currently, it supports an efficient Fetch by EClass method, that allows fetching all the instances of a type immediately, without having to load the rest of the model. Future versions of Hawk may expose additional operations through this menu. Finally, the EMF resource can be used normally from any EMF-based tools (e.g. transformation engines). However, to make the most out of the resources it will be necessary to extend the tools to have them integrate the efficient graph-based operations that are not part of the EMF Resource interface.","title":"Graph as EMF model"},{"location":"advanced-use/meta-queries/","text":"Hawk extends the regular EOL facilities to be able to query the metamodels registered within the instance: Model.types lists all the types registered in Hawk ( EClass instances for EMF). Model.metamodels lists all the metamodels registered in Hawk ( EPackage instances for EMF). Model.files lists all the files indexed by Hawk (may be limited through the context). Model.getTypeOf(obj) retrieves the type of the object obj . Model.getFileOf(obj) retrieves the first file containing the object obj . Model.getFilesOf(obj) retrieves all the files containing the object obj . For a metamodel mm , these attributes are available: mm.uri is the namespace URI of the metamodel. mm.metamodelType is the type of metamodel that was registered. mm.dependencies lists the metamodels this metamodel depends on (usually at least the Ecore metamodel for EMF-based metamodels). mm.types lists the types defined in this metamodel. mm.resource retrieves the original string representation for this metamodel (the original .ecore file for EMF). For a type t , these attributes are available: t.metamodel retrieves the metamodel that defines the type. t.all retrieves all instances of that type efficiently (includes subtypes). t.name retrieves the name of the type. t.attributes lists the attributes of the type, as slots (see below). t.references lists the references of the type, as slots. t.features lists the attributes and references of the type. For a slot sl , these attributes are available: sl.name : name of the slot. sl.type : type of the value of the slot. sl.isMany : true if this is a multi-valued slot. sl.isOrdered : true if the values should follow some order. sl.isAttribute : true if this is an attribute slot. sl.isReference : true if this is a reference slot. sl.isUnique : true if the value for this slot should be unique within its model. For a file f , these attributes are available: f.path : returns the path of the file within the repository (e.g. /input.xmi ). f.repository : returns the URL of the repository (e.g. file:///home/myuser/models ). f.roots : returns the root model elements in the file. f.contents : returns all the model elements in the file.","title":"Meta-level queries"},{"location":"advanced-use/oomph/","text":"Oomph has a feature that synchronizes preferences across workspaces (see bug 490549 ). This can be a problem if you expect different workspaces to have different Hawk indexes. If so, you should reconfigure Oomph so it does not record the /instance/org.hawk.osgiserver preferences node at the \"User\" and \"Installation\" levels. To do this, go to \"Window > Preferences\", select \"Oomph > Setup Tasks > Preference Recorder\", check \"Record into\", select \"User\" and make sure /instance/org.hawk.osgiserver/config either does not appear or is unchecked . It should be the same for \"Installation\" and \"Workspace\".","title":"Oomph and Hawk"},{"location":"advanced-use/temporal-queries/","text":"The latest versions of Hawk have the capability to index every version of all the models in the locations being monitored. To enable this capability, your Hawk index must meet certain conditions: You must be using a time-aware backend (currently, Greycat). You must be using the time-aware updater (TimeAwareModelUpdater) and not the standard one. You must be using the time-aware indexer factory and not the standard one (TimeAwareHawkFactory). You must query the index with a time-aware query language: org.hawk.timeaware.queries.TimeAwareEOLQueryEngine org.hawk.timeaware.queries.TimelineEOLQueryEngine If you meet these constraints, you can index a SVN repository with models and Hawk will turn the full history of every model into an integrated temporal graph database, or index a workspace/local folder and have Hawk remember the history of every model from then onwards. You will be able to query this temporal graph through an extension of Hawk's EOL dialect. This functionality was first discussed in our MRT 2018 paper, \"Reflecting on the past and the present with temporal graph-based models\". Data model \u00b6 The usual type -> model element graph in Hawk is extended to give both types and model elements their own histories. The histories are defined as follows: Types are immortal: they are created at the first endpoint in the graph and last to the \"end of time\" of the graph. There is a new version whenever an instance of the type is created or destroyed. Model elements are created at a certain timepoint, and either survive or are destroyed at another timepoint. Model elements are assumed to have a persistent identity: either its natural/artificial identifier, or its location within the model. New versions are produced when an attribute or a reference changes. Timepoints are provided by the Hawk connectors, and they tend to be commit timestamps or file timestamps. In SVN, these are commit timestamps to millisecond precision. Basic history traversal primitives \u00b6 The actual primitives are quite simple. In the time-aware dialect of Hawk, types and model elements expose the following additional attributes and operations: x.versions : returns the sequence of all versions for x , from newest to oldest x.getVersionsBetween(from, to) : versions within a range of timepoints x.getVersionsFrom(from) : versions from a timepoint (included) x.getVersionsUpTo(from) : versions up to a timepoint (included) x.earliest , x.latest : earliest / latest version x.next , x.prev / x.previous : next / previous version x.time : version timepoint Temporal assertions \u00b6 It is possible to evaluate assertions over the history of a type or model element: x.always(version | predicate over version) : true if and only if (\"iff\") the predicate is true for every version of x . x.never(version | predicate over version) : true iff the predicate is false for every version of x . x.eventually(version | predicate over version) : true iff the predicate is true for some version of x . x.eventuallyAtLeast(version | predicate over version, count) : true iff the predicate is true in at least count versions of x . x.eventuallyAtMost(version | predicate over version, count) : true iff the predicate is true in at least one version and at most count versions of x . Scoping views (predicate-based) \u00b6 The versions in scope for the above assertions and primitives can be limited with: x.since(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards. This esentially imposes a left-closed version interval. x.after(version | predicate over version) will return the type/model element in the timepoint immediately after the oldest timepoint for which the predicate holds, or null if it does not exist. It is essentially a variant of x.since that implements a left-open interval. x.until(version | predicate over version) will return the the same type/model element, but it will only report versions up to and including the first one for which the predicate holds, or null if such a version does not exist. This implements a right-closed version interval. x.before(version | predicate over version) will return the same type/model element, but it will only report versions before (excluding) the first one for which the predicate holds, or null if such a version does not exist. This implements a right-open interval. x.when(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards that match the predicate. This is a left-closed, filtered interval. Scoping views (context-based) \u00b6 You can also limit the available versions from an existing type / model element: x.sinceThen : version of x that will only report the versions from x onwards (included). x.afterThen : next version of x that will only report the versions after x (excluded). null if a next version does not exist. x.untilThen : version of x that will only report the versions up to x (included). x.beforeThen : previous version of x that will only report the versions before x (excluded). null if a previous version does not exist. You can undo the scoping with .unscoped . This will give you the same model element or type, but with all the versions available once more. Scoping views (based on derived attributes) \u00b6 Some of the events we may be interested in may be very rare. In long histories, it may be very expensive to find such rare events by iterating over all the versions of a model element. In these cases, it is possible to define a derived Boolean attribute (e.g. HasManyChildren for a Tree , with definiton return self.children.size > 100; ) on a type, and then use these additional operations: x.whenAnnotated('AttributeName') : returns a view of the model element x that exposes all the versions when the derived attribute named AttributeName defined on the type of x was true . The view will be at the earliest timepoint when this happened. x.sinceAnnotated('AttributeName') : equivalent to since , but using the derived attribute AttributeName . x.afterAnnotated('AttributeName') : equivalent to after . See above. x.untilAnnotated('AttributeName') : equivalent to until . See above. x.beforeAnnotated('AttributeName') : equivalent to before . See above. IMPORTANT : until #83 is resolved, you will need to define these derived attributes before you index any model versions. Global operations on the model \u00b6 The Model global reference is extended with new operations: Model.allInstancesNow returns all instances of the model at the timepoint equal to current system time. Model.allInstancesAt(timepoint) returns all instances of the model at the specified timepoint, measured in the integer amount of milliseconds elapsed since the epoch. Some examples \u00b6 A simple query to find the number of instances of X in the latest version of the model would be: return X.latest.all.size; If we want to do find the second last time that instances of X were created, we could write something like: return X.latest.prev.time; If we want to find an X that at some point had y greater than 0 and still survives to the latest revision, we could write something like: return X.latest.all.select(x|x.versions.exists(vx|vx.y > 0)); More advanced queries can be found in the Git repository for the MRT 2018 experiment tool . Timeline queries \u00b6 If you want to obtain the results of a certain query for all versions of a model, you can use the TimelineEOLQueryEngine instead. This operates by repeating the same query while changing the global timepoint of the graph, so you can write your query as a normal one and see how it evolves over time. For instance, if using return Model.allInstances.size; , you would see how the number of instances evolved over the various versions of the graph. NOTE: due to current implementation restrictions, this will only process versions where type nodes changed (i.e. objects were created or deleted). We plan to lift this restriction in the near future. Current limitations \u00b6 Subtree contexts, file-first/derived allOf and traversal scoping are not yet implemented for this query engine. File/repository patterns do work. Derived features will only work if added before any VCSes are added, and the impact of adding multiple VCS with their own histories has not been tested yet. Please make sure to report any issues!","title":"Temporal queries"},{"location":"advanced-use/temporal-queries/#data-model","text":"The usual type -> model element graph in Hawk is extended to give both types and model elements their own histories. The histories are defined as follows: Types are immortal: they are created at the first endpoint in the graph and last to the \"end of time\" of the graph. There is a new version whenever an instance of the type is created or destroyed. Model elements are created at a certain timepoint, and either survive or are destroyed at another timepoint. Model elements are assumed to have a persistent identity: either its natural/artificial identifier, or its location within the model. New versions are produced when an attribute or a reference changes. Timepoints are provided by the Hawk connectors, and they tend to be commit timestamps or file timestamps. In SVN, these are commit timestamps to millisecond precision.","title":"Data model"},{"location":"advanced-use/temporal-queries/#basic-history-traversal-primitives","text":"The actual primitives are quite simple. In the time-aware dialect of Hawk, types and model elements expose the following additional attributes and operations: x.versions : returns the sequence of all versions for x , from newest to oldest x.getVersionsBetween(from, to) : versions within a range of timepoints x.getVersionsFrom(from) : versions from a timepoint (included) x.getVersionsUpTo(from) : versions up to a timepoint (included) x.earliest , x.latest : earliest / latest version x.next , x.prev / x.previous : next / previous version x.time : version timepoint","title":"Basic history traversal primitives"},{"location":"advanced-use/temporal-queries/#temporal-assertions","text":"It is possible to evaluate assertions over the history of a type or model element: x.always(version | predicate over version) : true if and only if (\"iff\") the predicate is true for every version of x . x.never(version | predicate over version) : true iff the predicate is false for every version of x . x.eventually(version | predicate over version) : true iff the predicate is true for some version of x . x.eventuallyAtLeast(version | predicate over version, count) : true iff the predicate is true in at least count versions of x . x.eventuallyAtMost(version | predicate over version, count) : true iff the predicate is true in at least one version and at most count versions of x .","title":"Temporal assertions"},{"location":"advanced-use/temporal-queries/#scoping-views-predicate-based","text":"The versions in scope for the above assertions and primitives can be limited with: x.since(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards. This esentially imposes a left-closed version interval. x.after(version | predicate over version) will return the type/model element in the timepoint immediately after the oldest timepoint for which the predicate holds, or null if it does not exist. It is essentially a variant of x.since that implements a left-open interval. x.until(version | predicate over version) will return the the same type/model element, but it will only report versions up to and including the first one for which the predicate holds, or null if such a version does not exist. This implements a right-closed version interval. x.before(version | predicate over version) will return the same type/model element, but it will only report versions before (excluding) the first one for which the predicate holds, or null if such a version does not exist. This implements a right-open interval. x.when(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards that match the predicate. This is a left-closed, filtered interval.","title":"Scoping views (predicate-based)"},{"location":"advanced-use/temporal-queries/#scoping-views-context-based","text":"You can also limit the available versions from an existing type / model element: x.sinceThen : version of x that will only report the versions from x onwards (included). x.afterThen : next version of x that will only report the versions after x (excluded). null if a next version does not exist. x.untilThen : version of x that will only report the versions up to x (included). x.beforeThen : previous version of x that will only report the versions before x (excluded). null if a previous version does not exist. You can undo the scoping with .unscoped . This will give you the same model element or type, but with all the versions available once more.","title":"Scoping views (context-based)"},{"location":"advanced-use/temporal-queries/#scoping-views-based-on-derived-attributes","text":"Some of the events we may be interested in may be very rare. In long histories, it may be very expensive to find such rare events by iterating over all the versions of a model element. In these cases, it is possible to define a derived Boolean attribute (e.g. HasManyChildren for a Tree , with definiton return self.children.size > 100; ) on a type, and then use these additional operations: x.whenAnnotated('AttributeName') : returns a view of the model element x that exposes all the versions when the derived attribute named AttributeName defined on the type of x was true . The view will be at the earliest timepoint when this happened. x.sinceAnnotated('AttributeName') : equivalent to since , but using the derived attribute AttributeName . x.afterAnnotated('AttributeName') : equivalent to after . See above. x.untilAnnotated('AttributeName') : equivalent to until . See above. x.beforeAnnotated('AttributeName') : equivalent to before . See above. IMPORTANT : until #83 is resolved, you will need to define these derived attributes before you index any model versions.","title":"Scoping views (based on derived attributes)"},{"location":"advanced-use/temporal-queries/#global-operations-on-the-model","text":"The Model global reference is extended with new operations: Model.allInstancesNow returns all instances of the model at the timepoint equal to current system time. Model.allInstancesAt(timepoint) returns all instances of the model at the specified timepoint, measured in the integer amount of milliseconds elapsed since the epoch.","title":"Global operations on the model"},{"location":"advanced-use/temporal-queries/#some-examples","text":"A simple query to find the number of instances of X in the latest version of the model would be: return X.latest.all.size; If we want to do find the second last time that instances of X were created, we could write something like: return X.latest.prev.time; If we want to find an X that at some point had y greater than 0 and still survives to the latest revision, we could write something like: return X.latest.all.select(x|x.versions.exists(vx|vx.y > 0)); More advanced queries can be found in the Git repository for the MRT 2018 experiment tool .","title":"Some examples"},{"location":"advanced-use/temporal-queries/#timeline-queries","text":"If you want to obtain the results of a certain query for all versions of a model, you can use the TimelineEOLQueryEngine instead. This operates by repeating the same query while changing the global timepoint of the graph, so you can write your query as a normal one and see how it evolves over time. For instance, if using return Model.allInstances.size; , you would see how the number of instances evolved over the various versions of the graph. NOTE: due to current implementation restrictions, this will only process versions where type nodes changed (i.e. objects were created or deleted). We plan to lift this restriction in the near future.","title":"Timeline queries"},{"location":"advanced-use/temporal-queries/#current-limitations","text":"Subtree contexts, file-first/derived allOf and traversal scoping are not yet implemented for this query engine. File/repository patterns do work. Derived features will only work if added before any VCSes are added, and the impact of adding multiple VCS with their own histories has not been tested yet. Please make sure to report any issues!","title":"Current limitations"},{"location":"basic-use/core-concepts/","text":"Core concepts and general usage \u00b6 Components \u00b6 Hawk is an extensible system. Currently, it contains the following kinds of components: Type Role Current implementations Change listeners React to changes in the graph produced by the updaters Tracing, Validation Graph backends Integrate database technologies Neo4j , OrientDB , Greycat Model drivers Integrate modelling technologies Ecore , BPMN , Modelio , IFC2x3/IFC4 in this repo , and UML2 Query languages Translate high-level queries into efficient graph queries Epsilon Object Language , Epsilon Pattern Language , OrientDB SQL Updaters Update the graph based on the detected changes in the models and metamodels Built-in VCS managers Integrate file-based model repositories Local folders, SVN repos, Eclipse workspaces, HTTP files General usage \u00b6 Using Hawk generally involves these steps: Create a new Hawk index, based on a specific backend (e.g. Neo4j or OrientDB). Add the required metamodels to the index. Add the model repositories to be monitored. Wait for the initial batch insert (may take some time in large repositories). Add the desired indexed and derived attributes. Perform fast and efficient queries on the graph, using one of the supported query languages (see table above). In the following sections, we will show how to perform these steps. Managing indexes with the Hawk view \u00b6 To manage and use Hawk indexes, first open the \"Hawk\" Eclipse view, using \"Window > Show View > Other... > Hawk > Hawk\". It should look like this: Hawk indexes are queried and managed from this view. From left to right, the buttons are: Query: opens the query dialog. Run: starts a Hawk index if it was stopped. Stop: stops a Hawk index if it was running. Sync: request the Hawk index to check the indexed repositories immediately. Delete: removes an index from the Hawk view, without deleting the actual database (it can be usually recovered later using the \"Import\" button). To remove a local index completely, select it and press Shift+Delete . New: creates a new index (more info below). Import: imports a Hawk index from a factory. Hawk itself only provides a \"local\" factory that looks at the subdirectories of the current Eclipse workspace. Configure: opens the index configuration dialog, which allows for managing the registered metamodels, the repositories to be indexed, the attributes to be derived and the attributes to be indexed. Creating a new index \u00b6 To create a new index, open the Hawk view and use the \"New\" button to open this dialog: The dialog requires these fields: Name: a descriptive name for the index. Only used as an identifier. Instance type: Hawk only supports local instances, but mondo-integration can add support for remote instances. Local storage folder: folder that will store the actual database. If the folder exists, Hawk will reuse that database instead of creating a new one. Remote location: only used for the remote instances in mondo-integrtion . Enabled plugins: list of plugins that are currently enabled in Hawk. Back-end: database backend to be used (currently either Neo4j or OrientDB). Min/max delay: minimum and maximum delays in milliseconds between synchronisations. Hawk will start at the minimum value: every time it does not find any changes, it will double the delay up to the maximum value. If it finds a change, it will reset back to the minimum value. Periodic synchronisation can be completely disabled by changing the minimum and maximum delays to 0: in this mode, Hawk will only synchronise on startup, when a repository is added or when the user requests it manually. Once these fields have been filled in, Hawk will create and set up the index in a short period. Managing metamodels \u00b6 After creating the index, the next step is to register the metamodels of the models that are going to be indexed. To do this, select the index in the Hawk view and either double click it or click on the \"Configure\" button. The configure dialog will open: The configure dialog has several tabs. For managing metamodels, we need to go to the \"Metamodels\" tab. It will list the URIs of the currently registered metamodels. If a metamodel we need is not listed there, we can use the \"Add\" button to provide Hawk with the appropriate file to be indexed (e.g. the .ecore file for EMF-based models, or the metamodel-descriptor.xml for Modelio-based models). We can also \"Remove\" metamodels: this will remove all dependent models and metamodels as well. To try out Hawk, we recommend adding the JDTAST.ecore metamodel, which was used in the GraBaTs 2009 case study from AtlanMod . For Modelio metamodels, use the metamodel-descriptor.xml for Modelio 3.6 projects (for older projects, use the older descriptors included as metamodel_*.xml files in the Modelio 3.6 sources ). Keep in mind that metamodels may have dependencies to others. You will need to either add all metamodels at once, or add each metamodel after those it depends upon. If adding all the metamodels at once, Hawk will rearrange their addition taking into account their mutual dependencies. Note: the EMF driver can parse regular Ecore metamodels with the .ecore extension. Note: regarding the Modelio metamodel-descriptor.xml files, you can find those as part of the Modelio source code . Managing repositories \u00b6 Having added the metamodels of the models to be indexed, the following step is to add the repositories to be indexed. To do so, go to the \"Indexed Locations\" tab of the Hawk configure dialog, and use the \"Add\" button. Hawk will present the following dialog: The fields to be used are as follows: Type: type of repository to be indexed. Location: URL or path to the repository. For local folders, it is recommended to use the \"Browse...\" button to produce the adequate file:// URL. For SVN, it is best to copy and paste the full URL. Finally, the location is irrelevant for workspace repositories: selecting any directory from \"Browse...\" will work just the same. User + pass: for private SVN repositories, these will be the username and password to be used to connect to the repository. Hawk will store the password on the Eclipse secure storage. To try out Hawk, after adding the JDTAST.ecore metamodel from the previous section, we recommend adding a folder with a copy of the set0.xmi file. It has around 70k model elements. To watch over the indexing process, look at the \"Error Log\" view or run Eclipse with the -console option. The supported file extensions are as follows: Driver Extensions EMF .xmi , .model , any extensions in the EMF extension factory map that use XMIResourceFactoryImpl , any extensions mentioned through the org.hawk.emf.model.extraExtensions Java system property (e.g. -Dorg.hawk.emf.model.extraExtensions=.railway,.rail ). UML2 .uml . .profile.uml files can be indexed normally and also registered as metamodels. BPMN .bpmn , .bpmn2 . Modelio .exml , .ramc . Parses mmversion.dat internally for metadata. IFC .ifc , .ifcxml , .ifc.txt , .ifcxml.txt , .ifc.zip , .ifczip . Managing indexed attributes \u00b6 Simply indexing the models into the graph will already speed up considerably some common queries, such as finding all the instances of a type: in Hawk, this is done through direct edge traversal instead of going through the entire model. However, queries that filter model elements through the value of their attributes will need additional indexing to be set up. For instance, if we wanted to speed up return Class.all.selectOne(c|c.name='MyClass'); (which returns the class named \"MyClass\"), we would need to index the name attribute in the Class type. To do so, we need to go to the Hawk configure dialog, select the \"Indexed Attributes\" tab and press the \"Add\" button. This dialog will open: Its fields are as follows: Metamodel URI: the URI of the metamodel that has the type we want. Type Name: the name of the type (here \"Class\"). Attribute Name: the name of the attribute to be indexed (here \"name\"). Please allow some time after the dialog is closed to have Hawk generate the index. Currently, Hawk can index attributes with strings, booleans and numbers. Indexing will speed up not only = , but also > and all the other relational operators. Managing derived attributes \u00b6 Sometimes we will need to filter model elements through a piece of information that is not directly stored among its attributes, but is rather computed from them. To speed up the process, Hawk can keep precompute these derived attributes in the graph, keeping them up to date and indexing them. For instance, if we wanted to quickly filter UML classes by their number of operations, we would go to the Hawk configure dialog, select the \"Derived Attributes\" tab and click on the \"Add\" button. This dialog would appear: The fields are as follows: Metamodel URI: the URI of the metamodel with the type to be extended. Type Name: the name of the type we are going to extend. Attribute Name: the name of the new derived attribute (should be unique). Attribute Type: the type of the new derived attribute. isMany: true if this is a collection of values, false otherwise. isOrdered: true if this is an ordered collection of values, false otherwise. isUnique: true if the value should provide a unique identifier, false otherwise. Derivation Language: query language that the derivation logic will be written on. EOL is the default choice. Derivation Logic: expression in the chosen language that will compute the value. Hawk provides the self variable to access the model element being extended. For this particular example, we'd set the fields like this: Metamodel URI: the URI of the UML metamodel. Type Name: Class. Attribute Name: ownedOperationCount. Attribute Type: Integer. isMany, isOrdered, isUnique: false. Derivation Language: EOLQueryEngine. Derivation Logic: return self.ownedOperation.size; . After pressing OK, Hawk will spend some time computing the derived attribute and indexing the value. After that, queries such as return Class.all.select(c|c.ownedOperationCount > 20); will complete much faster. Querying the graph \u00b6 To query the indexed models, use the \"Query\" button of the Hawk view. This dialog will open: The actual query can be entered through the \"Query\" field manually, or loaded from a file using the \"Query File\" button. The query should be written in the language selected in \"Query Engine\". The scope of the query can be limited using the \"Context Repositories\" and \"Context Files\" fields: for instance, using set1.xmi on the \"Context Files\" field would limit it to the contents of the set1.xmi file. Running the query with \"Run Query\" button will place the results on the \"Result\" field.","title":"Core concepts"},{"location":"basic-use/core-concepts/#core-concepts-and-general-usage","text":"","title":"Core concepts and general usage"},{"location":"basic-use/core-concepts/#components","text":"Hawk is an extensible system. Currently, it contains the following kinds of components: Type Role Current implementations Change listeners React to changes in the graph produced by the updaters Tracing, Validation Graph backends Integrate database technologies Neo4j , OrientDB , Greycat Model drivers Integrate modelling technologies Ecore , BPMN , Modelio , IFC2x3/IFC4 in this repo , and UML2 Query languages Translate high-level queries into efficient graph queries Epsilon Object Language , Epsilon Pattern Language , OrientDB SQL Updaters Update the graph based on the detected changes in the models and metamodels Built-in VCS managers Integrate file-based model repositories Local folders, SVN repos, Eclipse workspaces, HTTP files","title":"Components"},{"location":"basic-use/core-concepts/#general-usage","text":"Using Hawk generally involves these steps: Create a new Hawk index, based on a specific backend (e.g. Neo4j or OrientDB). Add the required metamodels to the index. Add the model repositories to be monitored. Wait for the initial batch insert (may take some time in large repositories). Add the desired indexed and derived attributes. Perform fast and efficient queries on the graph, using one of the supported query languages (see table above). In the following sections, we will show how to perform these steps.","title":"General usage"},{"location":"basic-use/core-concepts/#managing-indexes-with-the-hawk-view","text":"To manage and use Hawk indexes, first open the \"Hawk\" Eclipse view, using \"Window > Show View > Other... > Hawk > Hawk\". It should look like this: Hawk indexes are queried and managed from this view. From left to right, the buttons are: Query: opens the query dialog. Run: starts a Hawk index if it was stopped. Stop: stops a Hawk index if it was running. Sync: request the Hawk index to check the indexed repositories immediately. Delete: removes an index from the Hawk view, without deleting the actual database (it can be usually recovered later using the \"Import\" button). To remove a local index completely, select it and press Shift+Delete . New: creates a new index (more info below). Import: imports a Hawk index from a factory. Hawk itself only provides a \"local\" factory that looks at the subdirectories of the current Eclipse workspace. Configure: opens the index configuration dialog, which allows for managing the registered metamodels, the repositories to be indexed, the attributes to be derived and the attributes to be indexed.","title":"Managing indexes with the Hawk view"},{"location":"basic-use/core-concepts/#creating-a-new-index","text":"To create a new index, open the Hawk view and use the \"New\" button to open this dialog: The dialog requires these fields: Name: a descriptive name for the index. Only used as an identifier. Instance type: Hawk only supports local instances, but mondo-integration can add support for remote instances. Local storage folder: folder that will store the actual database. If the folder exists, Hawk will reuse that database instead of creating a new one. Remote location: only used for the remote instances in mondo-integrtion . Enabled plugins: list of plugins that are currently enabled in Hawk. Back-end: database backend to be used (currently either Neo4j or OrientDB). Min/max delay: minimum and maximum delays in milliseconds between synchronisations. Hawk will start at the minimum value: every time it does not find any changes, it will double the delay up to the maximum value. If it finds a change, it will reset back to the minimum value. Periodic synchronisation can be completely disabled by changing the minimum and maximum delays to 0: in this mode, Hawk will only synchronise on startup, when a repository is added or when the user requests it manually. Once these fields have been filled in, Hawk will create and set up the index in a short period.","title":"Creating a new index"},{"location":"basic-use/core-concepts/#managing-metamodels","text":"After creating the index, the next step is to register the metamodels of the models that are going to be indexed. To do this, select the index in the Hawk view and either double click it or click on the \"Configure\" button. The configure dialog will open: The configure dialog has several tabs. For managing metamodels, we need to go to the \"Metamodels\" tab. It will list the URIs of the currently registered metamodels. If a metamodel we need is not listed there, we can use the \"Add\" button to provide Hawk with the appropriate file to be indexed (e.g. the .ecore file for EMF-based models, or the metamodel-descriptor.xml for Modelio-based models). We can also \"Remove\" metamodels: this will remove all dependent models and metamodels as well. To try out Hawk, we recommend adding the JDTAST.ecore metamodel, which was used in the GraBaTs 2009 case study from AtlanMod . For Modelio metamodels, use the metamodel-descriptor.xml for Modelio 3.6 projects (for older projects, use the older descriptors included as metamodel_*.xml files in the Modelio 3.6 sources ). Keep in mind that metamodels may have dependencies to others. You will need to either add all metamodels at once, or add each metamodel after those it depends upon. If adding all the metamodels at once, Hawk will rearrange their addition taking into account their mutual dependencies. Note: the EMF driver can parse regular Ecore metamodels with the .ecore extension. Note: regarding the Modelio metamodel-descriptor.xml files, you can find those as part of the Modelio source code .","title":"Managing metamodels"},{"location":"basic-use/core-concepts/#managing-repositories","text":"Having added the metamodels of the models to be indexed, the following step is to add the repositories to be indexed. To do so, go to the \"Indexed Locations\" tab of the Hawk configure dialog, and use the \"Add\" button. Hawk will present the following dialog: The fields to be used are as follows: Type: type of repository to be indexed. Location: URL or path to the repository. For local folders, it is recommended to use the \"Browse...\" button to produce the adequate file:// URL. For SVN, it is best to copy and paste the full URL. Finally, the location is irrelevant for workspace repositories: selecting any directory from \"Browse...\" will work just the same. User + pass: for private SVN repositories, these will be the username and password to be used to connect to the repository. Hawk will store the password on the Eclipse secure storage. To try out Hawk, after adding the JDTAST.ecore metamodel from the previous section, we recommend adding a folder with a copy of the set0.xmi file. It has around 70k model elements. To watch over the indexing process, look at the \"Error Log\" view or run Eclipse with the -console option. The supported file extensions are as follows: Driver Extensions EMF .xmi , .model , any extensions in the EMF extension factory map that use XMIResourceFactoryImpl , any extensions mentioned through the org.hawk.emf.model.extraExtensions Java system property (e.g. -Dorg.hawk.emf.model.extraExtensions=.railway,.rail ). UML2 .uml . .profile.uml files can be indexed normally and also registered as metamodels. BPMN .bpmn , .bpmn2 . Modelio .exml , .ramc . Parses mmversion.dat internally for metadata. IFC .ifc , .ifcxml , .ifc.txt , .ifcxml.txt , .ifc.zip , .ifczip .","title":"Managing repositories"},{"location":"basic-use/core-concepts/#managing-indexed-attributes","text":"Simply indexing the models into the graph will already speed up considerably some common queries, such as finding all the instances of a type: in Hawk, this is done through direct edge traversal instead of going through the entire model. However, queries that filter model elements through the value of their attributes will need additional indexing to be set up. For instance, if we wanted to speed up return Class.all.selectOne(c|c.name='MyClass'); (which returns the class named \"MyClass\"), we would need to index the name attribute in the Class type. To do so, we need to go to the Hawk configure dialog, select the \"Indexed Attributes\" tab and press the \"Add\" button. This dialog will open: Its fields are as follows: Metamodel URI: the URI of the metamodel that has the type we want. Type Name: the name of the type (here \"Class\"). Attribute Name: the name of the attribute to be indexed (here \"name\"). Please allow some time after the dialog is closed to have Hawk generate the index. Currently, Hawk can index attributes with strings, booleans and numbers. Indexing will speed up not only = , but also > and all the other relational operators.","title":"Managing indexed attributes"},{"location":"basic-use/core-concepts/#managing-derived-attributes","text":"Sometimes we will need to filter model elements through a piece of information that is not directly stored among its attributes, but is rather computed from them. To speed up the process, Hawk can keep precompute these derived attributes in the graph, keeping them up to date and indexing them. For instance, if we wanted to quickly filter UML classes by their number of operations, we would go to the Hawk configure dialog, select the \"Derived Attributes\" tab and click on the \"Add\" button. This dialog would appear: The fields are as follows: Metamodel URI: the URI of the metamodel with the type to be extended. Type Name: the name of the type we are going to extend. Attribute Name: the name of the new derived attribute (should be unique). Attribute Type: the type of the new derived attribute. isMany: true if this is a collection of values, false otherwise. isOrdered: true if this is an ordered collection of values, false otherwise. isUnique: true if the value should provide a unique identifier, false otherwise. Derivation Language: query language that the derivation logic will be written on. EOL is the default choice. Derivation Logic: expression in the chosen language that will compute the value. Hawk provides the self variable to access the model element being extended. For this particular example, we'd set the fields like this: Metamodel URI: the URI of the UML metamodel. Type Name: Class. Attribute Name: ownedOperationCount. Attribute Type: Integer. isMany, isOrdered, isUnique: false. Derivation Language: EOLQueryEngine. Derivation Logic: return self.ownedOperation.size; . After pressing OK, Hawk will spend some time computing the derived attribute and indexing the value. After that, queries such as return Class.all.select(c|c.ownedOperationCount > 20); will complete much faster.","title":"Managing derived attributes"},{"location":"basic-use/core-concepts/#querying-the-graph","text":"To query the indexed models, use the \"Query\" button of the Hawk view. This dialog will open: The actual query can be entered through the \"Query\" field manually, or loaded from a file using the \"Query File\" button. The query should be written in the language selected in \"Query Engine\". The scope of the query can be limited using the \"Context Repositories\" and \"Context Files\" fields: for instance, using set1.xmi on the \"Context Files\" field would limit it to the contents of the set1.xmi file. Running the query with \"Run Query\" button will place the results on the \"Result\" field.","title":"Querying the graph"},{"location":"basic-use/examples-modelio/","text":"Example queries on Modelio models \u00b6 This article shows several example queries on Modelio projects. The Modelio model driver does not use the XMI export in Modelio: instead, it parses .exml files directly (which might be contained in .ramc files) and understands metamodels described in Modelio metamodel_descriptor.xml files. (To obtain one, download the source code for your Modelio version and search within it. Here is a copy of the one used for Modelio 3.6.) All the queries are written in the Epsilon Object Language , and assume that the toy Zoo Modelio project has been indexed. The queries are based on those in [[the XMI-based UML examples page|Example queries on XMI based UML models]]. The underlying UML model looks like this: To avoid ambiguity in type names, the default namespaces list in the query dialog should include modelio://uml::statik . All instances of a type \u00b6 Returns the number of instances of \"Class\" in the index: return Class . all . size ; Metamodel URI for the \"Class\" type \u00b6 Returns the URI of the metamodel that contains the \"Class\" type ( modelio://uml::statik ): return Model . types . selectOne ( t | t . name = 'Class' ). metamodel . uri ; Reference slots in a type \u00b6 Returns the reference slots in the type \"Class\": return Model . types . select ( t | t . name = 'Class' ). references ; Reference traversal \u00b6 Returns the superclass of \"Zebra\" by navigating the \"Parent\" and \"SuperType\" associations present in the Modelio metamodel: return Class . all . selectOne ( c | c . Name = 'Zebra' ) . Parent . SuperType . Name ; Reverse reference traversal \u00b6 Returns the subclasses of \"Animal\", using the revRefNav_ to navigate references in reverse: return Class . all . selectOne ( c | c . Name = 'Animal' ) . revRefNav_SuperType . revRefNav_Parent . Name ; Range queries with indexed or derived integer attributes \u00b6 This example requires adding a derived attribute first: Metamodel URI: modelio://uml::statik Type Name: Class Attribute Name: ownedOperationCount Attribute Type: Integer isMany, isOrdered, isUnique: false Derivation Language: EOLQueryEngine Derivation Logic: return self.OwnedOperation.size; After it has been added, this query will return the classes that have one or more operations: return Class . all . select ( c | c . ownedOperationCount > 0 ). Name ; Advanced example: loops, variables and custom operations \u00b6 This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own: var counts = Sequence {}; var i = 0 ; var n = count ( 0 ); while ( n > 0 ) { counts . add ( Sequence { \">\" + i , n }); i = i + 1 ; n = count ( i ); } return counts ; operation count ( n ) { return Class . all . select ( c | c . ownedOperationCount > n ). size ; }","title":"Examples (Modelio)"},{"location":"basic-use/examples-modelio/#example-queries-on-modelio-models","text":"This article shows several example queries on Modelio projects. The Modelio model driver does not use the XMI export in Modelio: instead, it parses .exml files directly (which might be contained in .ramc files) and understands metamodels described in Modelio metamodel_descriptor.xml files. (To obtain one, download the source code for your Modelio version and search within it. Here is a copy of the one used for Modelio 3.6.) All the queries are written in the Epsilon Object Language , and assume that the toy Zoo Modelio project has been indexed. The queries are based on those in [[the XMI-based UML examples page|Example queries on XMI based UML models]]. The underlying UML model looks like this: To avoid ambiguity in type names, the default namespaces list in the query dialog should include modelio://uml::statik .","title":"Example queries on Modelio models"},{"location":"basic-use/examples-modelio/#all-instances-of-a-type","text":"Returns the number of instances of \"Class\" in the index: return Class . all . size ;","title":"All instances of a type"},{"location":"basic-use/examples-modelio/#metamodel-uri-for-the-class-type","text":"Returns the URI of the metamodel that contains the \"Class\" type ( modelio://uml::statik ): return Model . types . selectOne ( t | t . name = 'Class' ). metamodel . uri ;","title":"Metamodel URI for the \"Class\" type"},{"location":"basic-use/examples-modelio/#reference-slots-in-a-type","text":"Returns the reference slots in the type \"Class\": return Model . types . select ( t | t . name = 'Class' ). references ;","title":"Reference slots in a type"},{"location":"basic-use/examples-modelio/#reference-traversal","text":"Returns the superclass of \"Zebra\" by navigating the \"Parent\" and \"SuperType\" associations present in the Modelio metamodel: return Class . all . selectOne ( c | c . Name = 'Zebra' ) . Parent . SuperType . Name ;","title":"Reference traversal"},{"location":"basic-use/examples-modelio/#reverse-reference-traversal","text":"Returns the subclasses of \"Animal\", using the revRefNav_ to navigate references in reverse: return Class . all . selectOne ( c | c . Name = 'Animal' ) . revRefNav_SuperType . revRefNav_Parent . Name ;","title":"Reverse reference traversal"},{"location":"basic-use/examples-modelio/#range-queries-with-indexed-or-derived-integer-attributes","text":"This example requires adding a derived attribute first: Metamodel URI: modelio://uml::statik Type Name: Class Attribute Name: ownedOperationCount Attribute Type: Integer isMany, isOrdered, isUnique: false Derivation Language: EOLQueryEngine Derivation Logic: return self.OwnedOperation.size; After it has been added, this query will return the classes that have one or more operations: return Class . all . select ( c | c . ownedOperationCount > 0 ). Name ;","title":"Range queries with indexed or derived integer attributes"},{"location":"basic-use/examples-modelio/#advanced-example-loops-variables-and-custom-operations","text":"This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own: var counts = Sequence {}; var i = 0 ; var n = count ( 0 ); while ( n > 0 ) { counts . add ( Sequence { \">\" + i , n }); i = i + 1 ; n = count ( i ); } return counts ; operation count ( n ) { return Class . all . select ( c | c . ownedOperationCount > n ). size ; }","title":"Advanced example: loops, variables and custom operations"},{"location":"basic-use/examples-xmi/","text":"Example queries on XMI models \u00b6 These are some sample queries that can be done on any set of indexed XMI-based UML models, assuming that Class::name has been added as an indexed attribute and Class::ownedOperationCount has been defined as a derived attribute (as showed in [[Basic concepts and usage]]). All the queries are written in the Epsilon Object Language . In order to index XMI-based UML models, you only need to enable the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when you create a new Hawk instance, and ensure your files have the .uml extension. If you are using any predefined UML data types, you may also want to add a PredefinedUMLLibraries location inside \"Indexed Locations\": that will integrate those predefined objects into the Hawk graph, allowing you to reference them on queries. The rest of this article will run on this toy XMI-based UML file , which was exported from this Modelio 3.2.1 project : To avoid ambiguity in type names, the default namespaces list in the query dialog should include the UML metamodel URI ( http://www.eclipse.org/uml2/5.0.0/UML for the above UML.ecore file). All instances of a type \u00b6 return Class.all.size; Returns the total number of classes within the specified scope. If you leave \"Context Files\" empty, it'll count all the classes in all the projects. If you put \"*OSS.modelio.zip\" in \"Context Files\", it'll count only the classes within the OSS project. This is faster than going through the model because we can go to the Class node and then simply count all the incoming edges with label \"ofType\". Reference slots in a type \u00b6 return Model.types.select(t|t.name='Class').references; Gives you all the reference slots in the UML \"Class\" type. This is an example of the queries that can be performed at the \"meta\" level: more details are available in [[Meta level queries in Hawk]]. The query dialog with the result would look like this: Reference traversal \u00b6 return Class.all .select(c|c.qualifiedName='zoo::Zebra') .superClass.flatten.name; Gives you the names of all the superclasses of class Zebra within model zoo . Reverse reference traversal \u00b6 return Class.all .select(c|c.qualifiedName='zoo::Animal') .revRefNav_superClass.flatten.name; Gives the names of all the sub classes of Animal (follows \"superClass\" in reverse). The UML metamodel doesn't have \"subclass\" links, but we can use Hawk's automatic support for reverse traversal of references. In general, if x.e is a reference, we can follow it in reverse with x.revRefNav_e . We can also access containers using x.eContainer . Range queries with indexed or derived integer attributes \u00b6 return Class.all.select(c|c.ownedOperationCount > 0).name; Finds the names of the classes with at least one operation of their own. Advanced example: loops, variables and custom operations \u00b6 var counts = Sequence {}; var i = 0; var n = count(0); while (n > 0) { counts.add(Sequence {\">\" + i, n}); i = i + 1; n = count(i); } return counts; operation count(n) { return Class.all.select(c|c.ownedOperationCount > n).size; } This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own.","title":"Examples (XMI)"},{"location":"basic-use/examples-xmi/#example-queries-on-xmi-models","text":"These are some sample queries that can be done on any set of indexed XMI-based UML models, assuming that Class::name has been added as an indexed attribute and Class::ownedOperationCount has been defined as a derived attribute (as showed in [[Basic concepts and usage]]). All the queries are written in the Epsilon Object Language . In order to index XMI-based UML models, you only need to enable the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when you create a new Hawk instance, and ensure your files have the .uml extension. If you are using any predefined UML data types, you may also want to add a PredefinedUMLLibraries location inside \"Indexed Locations\": that will integrate those predefined objects into the Hawk graph, allowing you to reference them on queries. The rest of this article will run on this toy XMI-based UML file , which was exported from this Modelio 3.2.1 project : To avoid ambiguity in type names, the default namespaces list in the query dialog should include the UML metamodel URI ( http://www.eclipse.org/uml2/5.0.0/UML for the above UML.ecore file).","title":"Example queries on XMI models"},{"location":"basic-use/examples-xmi/#all-instances-of-a-type","text":"return Class.all.size; Returns the total number of classes within the specified scope. If you leave \"Context Files\" empty, it'll count all the classes in all the projects. If you put \"*OSS.modelio.zip\" in \"Context Files\", it'll count only the classes within the OSS project. This is faster than going through the model because we can go to the Class node and then simply count all the incoming edges with label \"ofType\".","title":"All instances of a type"},{"location":"basic-use/examples-xmi/#reference-slots-in-a-type","text":"return Model.types.select(t|t.name='Class').references; Gives you all the reference slots in the UML \"Class\" type. This is an example of the queries that can be performed at the \"meta\" level: more details are available in [[Meta level queries in Hawk]]. The query dialog with the result would look like this:","title":"Reference slots in a type"},{"location":"basic-use/examples-xmi/#reference-traversal","text":"return Class.all .select(c|c.qualifiedName='zoo::Zebra') .superClass.flatten.name; Gives you the names of all the superclasses of class Zebra within model zoo .","title":"Reference traversal"},{"location":"basic-use/examples-xmi/#reverse-reference-traversal","text":"return Class.all .select(c|c.qualifiedName='zoo::Animal') .revRefNav_superClass.flatten.name; Gives the names of all the sub classes of Animal (follows \"superClass\" in reverse). The UML metamodel doesn't have \"subclass\" links, but we can use Hawk's automatic support for reverse traversal of references. In general, if x.e is a reference, we can follow it in reverse with x.revRefNav_e . We can also access containers using x.eContainer .","title":"Reverse reference traversal"},{"location":"basic-use/examples-xmi/#range-queries-with-indexed-or-derived-integer-attributes","text":"return Class.all.select(c|c.ownedOperationCount > 0).name; Finds the names of the classes with at least one operation of their own.","title":"Range queries with indexed or derived integer attributes"},{"location":"basic-use/examples-xmi/#advanced-example-loops-variables-and-custom-operations","text":"var counts = Sequence {}; var i = 0; var n = count(0); while (n > 0) { counts.add(Sequence {\">\" + i, n}); i = i + 1; n = count(i); } return counts; operation count(n) { return Class.all.select(c|c.ownedOperationCount > n).size; } This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own.","title":"Advanced example: loops, variables and custom operations"},{"location":"basic-use/installation/","text":"Hawk can be used as a regular Java library (to be embedded within another Java program) or as a set of plugins for the Eclipse IDE. To install most of Hawk's Eclipse plugins, point your installation to this update site, which is kept up to date automatically using Travis: https://download.eclipse.org/hawk/1.2.0/updates/ This is a composite update site, which contains not only Hawk, but also its dependencies. Simply check all the categories that start with \"Hawk\". Some of the components in Hawk cannot be redistributed in binary form due to incompatible licenses. You will need to build the update site for these restricted components yourself: please consult the developer resources in the wiki to do that.","title":"Installation"},{"location":"basic-use/papyrus/","text":"Hawk includes specific support for MDT2 UML models and UML profiles developed using Papyrus UML. This can be used by enabling the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when creating a Hawk instance. The implementation mostly reuses MDT UML2 and Papyrus UML as-is, in order to maximize compatibility. There are some minor caveats, which are documented in this page. Supported file extensions \u00b6 Hawk indexes plain UML2 models with the .uml extension, and Papyrus profiles with the .profile.uml extension. It does not index .di nor .notation files at the moment, as these do not provide semantic information. .xmi files are not indexed by the Hawk UML components, to avoid conflicts with the plain EMF support (matching the file to the proper model resource is done strictly by file extension). You are recommended to rename your UML2 XMI files to .uml for now. Predefined UML packages \u00b6 UML2 provides an implementation of the UML standard libraries, with packages containing some common datatypes (e.g. String or Integer). If your models use any of these libraries, we heavily recommend that you add a PredefinedUMLLibraries component in your \"Indexed Locations\" section. Otherwise, any references from your models to the libraries will be left unresolved, and you will not be able to use those predefined entities in your queries. This is because Hawk operates normally on files, and the predefined UML libraries are generally bundled within the UML2 plugins. The PredefinedUMLLibraries exposes those bundled resources to Hawk in a way that is transparent to the querying language. Multi-version Papyrus UML profile support \u00b6 Beyond registering all the metamodels required to index plain UML models, the UML metamodel resource factory in Hawk can register .profile.uml files as metamodels. This allows us to index UML models with custom profiles in Hawk. Since UML profiles can be versioned, Hawk will register version X.Y.Z of profile with URI http://your/profile with http://your/profile/X.Y.Z as the URI. When querying with Hawk, you will have to specify http://your/profile/X.Y.Z in your default namespaces, in order to resolve the ambiguity that may exist between multiple versions of the same metamodel. If a new version of the UML profile is created, you will need to register the .profile.uml file again with Hawk before it can index models that use that version of the profile. Hawk treats entities of different versions of the same profile as entirely different types. In terms of implementation details, Hawk takes advantage of the fact that .profile.uml files contain a collection of Ecore EPackages . Hawk simply adds the /X.Y.Z version suffix to their namespace URI, and otherwise leaves them untouched. Example: using Hawk to index all UML models in an Eclipse workspace \u00b6 We will show how Hawk can be used to index all the UML models in an Eclipse workspace, including those that have custom profiles applied to them. To illustrate our approach, we will use these toy models created with Papyrus. We assume that you have installed Hawk into your Eclipse instance, following the steps in [[this wiki page|Installation]]. Models \u00b6 The model is a very simple UML class diagram: It only has two classes, one of which has the <<Special>> stereotype with a priority property equal to 23. This value is not shown in the diagram, but it can be checked from the \"Profile\" page of the \"Properties\" view when the class is selected. The profile including the <<Special>> stereotype is also very simple: The diagram imports the Class UML metaclass, and then extends it with the <<Special>> stereotype. Creating the Hawk index \u00b6 Before we can run any queries, we need to create a Hawk index. If we have installed Hawk correctly, we will be able to open the \"Hawk\" view and see something like this: Right now, we have no indexes in Hawk. We need to press the \"Add\" button, which is highlighted in red above. We should see a dialog similar to this: Important points: We can pick any name we want, as long as it is unique. Instance type should be a LocalHawkFactory if we intend to index our workspace. The Local storage folder will contain some of the configuration of that Hawk instance, and the database. Remote location is irrelevant when using the LocalHawkFactory . If we are only interested in indexing the UML models in the workspace, it is a good idea to Disable all the plugins and then check only the UML metamodel and model resource factories. You can choose to use Neo4j (if you [[build it on your own|Running from source]]), OrientDB, or any other backend we may support in the future. Min/Max Delay indicate how often will Hawk poll all the indexed locations. If you are only indexing the current workspace, you can leave both at 0 to disable polling: regardless of this setting, Hawk will react automatically whenever something in the workspace changes. Once the index has been created, you should see an entry for it in the \"Hawk\" view: Adding metamodels and models \u00b6 From the screenshot above, we know that the index is RUNNING (available for queries) and not UPDATING nor STOPPED , so we can start configuring it as we need. First, we should double click on it to open the configuration dialog: We should go to the \"Metamodels\" tab and click on \"Add...\", then select the specialThings.profile/model.profile.uml file. Hawk will register our custom profile as a metamodel, and we will be ready to index models using all the versions of this profile so far. Should we define any newer versions, we will have to add the file again to Hawk. The dialog will now list the new metamodel: Now we are ready to add the locations where the models to be indexed are stored. We go to the \"Indexed Locations\" tab and click on \"Add\". First, we will add the predefined UML libraries with some commonly used instances (e.g. UML data types): We need to pick the right \"Type\", and then enter / in the \"Location\" field. The location is ignored for this repository, but due to current limitations in the UI we have to enter something in the field. Next, we have to tell Hawk to index all the models in the workspace. We will \"Add\" another location, and this time fill the dialog like this: Again, the / \"Location\" is irrelevant but required by the UI. Hawk will spend some time UPDATING , and once it is RUNNING again we will be ready to run some queries on it. Querying Hawk \u00b6 We can finally query Hawk now. To do so, we need to select our index on the \"Hawk\" view and click on the \"Query\" button, which looks like a magnifying glass: We will see a dialog like this one, with all fields empty: Enter the query return Class.all.name; and click on the \"Run Query\" button. This query lists the names of all the classes indexed so far by Hawk. You will notice that we obtain these results: [E, T, MyClass, Special, V, NotSoSpecial, Stereotype1, K, E] The E/T/V/K/E classes came from the predefined UML libraries. If you want only the results from your workspace, you must tell Hawk through the \"Context Repositories\" field, by entering platform:/resource . This is the base URI used by Hawk to identify all the files in your workspace. Click on \"Run Query\" again, and you should obtain the results shown in the screenshot: [MyClass, Stereotype1, Special, NotSoSpecial] Note how the query also returns the classes in the profile. Should you want to avoid this, you can either use the \"Context Files\" field ( *model.uml will do this) to further restrict the scope of the query. Finding UML objects by stereotype \u00b6 If you would like to find all applications of stereotype X , you can simply use X.all and then use base_Metaclass to find the object that was annotated with that stereotype. For instance, this query will find the name of all the classes that had the <<Special>> stereotype applied to them: return Special.all.base_Class.name; You will get: [MyClass] You can also access stereotype properties: return Special.all.collect(s| Sequence { s.priority, s.base_Class.name } ).asSequence; This will produce: [[23, MyClass]] Finding stereotype applications from the UML object \u00b6 If you want to go the other way around, you can use reverse reference navigation on those base_X references to find the stereotypes that have been applied to a UML object: return Class.all .selectOne(s|s.name = 'MyClass') .revRefNav_base_Class .collect(st|Model.getTypeOf(st)) .name; This would produce: [Special]","title":"Papyrus UML support"},{"location":"basic-use/papyrus/#supported-file-extensions","text":"Hawk indexes plain UML2 models with the .uml extension, and Papyrus profiles with the .profile.uml extension. It does not index .di nor .notation files at the moment, as these do not provide semantic information. .xmi files are not indexed by the Hawk UML components, to avoid conflicts with the plain EMF support (matching the file to the proper model resource is done strictly by file extension). You are recommended to rename your UML2 XMI files to .uml for now.","title":"Supported file extensions"},{"location":"basic-use/papyrus/#predefined-uml-packages","text":"UML2 provides an implementation of the UML standard libraries, with packages containing some common datatypes (e.g. String or Integer). If your models use any of these libraries, we heavily recommend that you add a PredefinedUMLLibraries component in your \"Indexed Locations\" section. Otherwise, any references from your models to the libraries will be left unresolved, and you will not be able to use those predefined entities in your queries. This is because Hawk operates normally on files, and the predefined UML libraries are generally bundled within the UML2 plugins. The PredefinedUMLLibraries exposes those bundled resources to Hawk in a way that is transparent to the querying language.","title":"Predefined UML packages"},{"location":"basic-use/papyrus/#multi-version-papyrus-uml-profile-support","text":"Beyond registering all the metamodels required to index plain UML models, the UML metamodel resource factory in Hawk can register .profile.uml files as metamodels. This allows us to index UML models with custom profiles in Hawk. Since UML profiles can be versioned, Hawk will register version X.Y.Z of profile with URI http://your/profile with http://your/profile/X.Y.Z as the URI. When querying with Hawk, you will have to specify http://your/profile/X.Y.Z in your default namespaces, in order to resolve the ambiguity that may exist between multiple versions of the same metamodel. If a new version of the UML profile is created, you will need to register the .profile.uml file again with Hawk before it can index models that use that version of the profile. Hawk treats entities of different versions of the same profile as entirely different types. In terms of implementation details, Hawk takes advantage of the fact that .profile.uml files contain a collection of Ecore EPackages . Hawk simply adds the /X.Y.Z version suffix to their namespace URI, and otherwise leaves them untouched.","title":"Multi-version Papyrus UML profile support"},{"location":"basic-use/papyrus/#example-using-hawk-to-index-all-uml-models-in-an-eclipse-workspace","text":"We will show how Hawk can be used to index all the UML models in an Eclipse workspace, including those that have custom profiles applied to them. To illustrate our approach, we will use these toy models created with Papyrus. We assume that you have installed Hawk into your Eclipse instance, following the steps in [[this wiki page|Installation]].","title":"Example: using Hawk to index all UML models in an Eclipse workspace"},{"location":"basic-use/papyrus/#models","text":"The model is a very simple UML class diagram: It only has two classes, one of which has the <<Special>> stereotype with a priority property equal to 23. This value is not shown in the diagram, but it can be checked from the \"Profile\" page of the \"Properties\" view when the class is selected. The profile including the <<Special>> stereotype is also very simple: The diagram imports the Class UML metaclass, and then extends it with the <<Special>> stereotype.","title":"Models"},{"location":"basic-use/papyrus/#creating-the-hawk-index","text":"Before we can run any queries, we need to create a Hawk index. If we have installed Hawk correctly, we will be able to open the \"Hawk\" view and see something like this: Right now, we have no indexes in Hawk. We need to press the \"Add\" button, which is highlighted in red above. We should see a dialog similar to this: Important points: We can pick any name we want, as long as it is unique. Instance type should be a LocalHawkFactory if we intend to index our workspace. The Local storage folder will contain some of the configuration of that Hawk instance, and the database. Remote location is irrelevant when using the LocalHawkFactory . If we are only interested in indexing the UML models in the workspace, it is a good idea to Disable all the plugins and then check only the UML metamodel and model resource factories. You can choose to use Neo4j (if you [[build it on your own|Running from source]]), OrientDB, or any other backend we may support in the future. Min/Max Delay indicate how often will Hawk poll all the indexed locations. If you are only indexing the current workspace, you can leave both at 0 to disable polling: regardless of this setting, Hawk will react automatically whenever something in the workspace changes. Once the index has been created, you should see an entry for it in the \"Hawk\" view:","title":"Creating the Hawk index"},{"location":"basic-use/papyrus/#adding-metamodels-and-models","text":"From the screenshot above, we know that the index is RUNNING (available for queries) and not UPDATING nor STOPPED , so we can start configuring it as we need. First, we should double click on it to open the configuration dialog: We should go to the \"Metamodels\" tab and click on \"Add...\", then select the specialThings.profile/model.profile.uml file. Hawk will register our custom profile as a metamodel, and we will be ready to index models using all the versions of this profile so far. Should we define any newer versions, we will have to add the file again to Hawk. The dialog will now list the new metamodel: Now we are ready to add the locations where the models to be indexed are stored. We go to the \"Indexed Locations\" tab and click on \"Add\". First, we will add the predefined UML libraries with some commonly used instances (e.g. UML data types): We need to pick the right \"Type\", and then enter / in the \"Location\" field. The location is ignored for this repository, but due to current limitations in the UI we have to enter something in the field. Next, we have to tell Hawk to index all the models in the workspace. We will \"Add\" another location, and this time fill the dialog like this: Again, the / \"Location\" is irrelevant but required by the UI. Hawk will spend some time UPDATING , and once it is RUNNING again we will be ready to run some queries on it.","title":"Adding metamodels and models"},{"location":"basic-use/papyrus/#querying-hawk","text":"We can finally query Hawk now. To do so, we need to select our index on the \"Hawk\" view and click on the \"Query\" button, which looks like a magnifying glass: We will see a dialog like this one, with all fields empty: Enter the query return Class.all.name; and click on the \"Run Query\" button. This query lists the names of all the classes indexed so far by Hawk. You will notice that we obtain these results: [E, T, MyClass, Special, V, NotSoSpecial, Stereotype1, K, E] The E/T/V/K/E classes came from the predefined UML libraries. If you want only the results from your workspace, you must tell Hawk through the \"Context Repositories\" field, by entering platform:/resource . This is the base URI used by Hawk to identify all the files in your workspace. Click on \"Run Query\" again, and you should obtain the results shown in the screenshot: [MyClass, Stereotype1, Special, NotSoSpecial] Note how the query also returns the classes in the profile. Should you want to avoid this, you can either use the \"Context Files\" field ( *model.uml will do this) to further restrict the scope of the query.","title":"Querying Hawk"},{"location":"basic-use/papyrus/#finding-uml-objects-by-stereotype","text":"If you would like to find all applications of stereotype X , you can simply use X.all and then use base_Metaclass to find the object that was annotated with that stereotype. For instance, this query will find the name of all the classes that had the <<Special>> stereotype applied to them: return Special.all.base_Class.name; You will get: [MyClass] You can also access stereotype properties: return Special.all.collect(s| Sequence { s.priority, s.base_Class.name } ).asSequence; This will produce: [[23, MyClass]]","title":"Finding UML objects by stereotype"},{"location":"basic-use/papyrus/#finding-stereotype-applications-from-the-uml-object","text":"If you want to go the other way around, you can use reverse reference navigation on those base_X references to find the stereotypes that have been applied to a UML object: return Class.all .selectOne(s|s.name = 'MyClass') .revRefNav_base_Class .collect(st|Model.getTypeOf(st)) .name; This would produce: [Special]","title":"Finding stereotype applications from the UML object"},{"location":"developers/plain-maven/","text":"Hawk can be reused as a library in a regular Java application, outside OSGi. Non-OSGi developers normally use Maven or a Maven-compatible build system (e.g. Ivy or SBT), rather than Tycho. To make it easier for these developers, Hawk provides a parallel hierarchy of pom-plain.xml files that can be used to build Hawk with plain Maven ( pom.xml files are reserved for Tycho). Not all Hawk modules are available through this build, as they may rely on OSGi (e.g. org.hawk.modelio ) or require downloading many external dependencies (e.g. org.hawk.bpmn ). .feature , .dependencies and .tests projects are not included either, as they are OSGi-specific. For that reason, this build should only be used for distribution, and not for regular development. To build with regular Maven, run mvn -f pom-plain.xml install from the root of the repository to compile the artifacts and install them into the local Maven repository, so they can be used in other Maven builds.","title":"Build with plain Maven"},{"location":"developers/run-from-source/","text":"These instructions are from a clean download of an Eclipse Luna Modelling distribution and include all optional dependencies. Clone this Git repository on your Eclipse instance (e.g. using git clone or EGit) and import all projects into the workspace (File > Import > Existing Projects into Workspace). Open the org.hawk.targetplatform/org.hawk.targetplatform.target file, wait for the target definition to be resolved and click on Set as Target Platform . Install IvyDE into your Eclipse instance, right click on org.hawk.neo4j-v2.dependencies and use \"Ivy > Retrieve 'dependencies'\". The libraries should appear within Referenced Libraries . Do the same for these other projects: org.hawk.orientdb org.hawk.localfolder org.hawk.greycat Force a full rebuild with Project > Clean... > Clean all projects if you still have errors. After all these steps, you should have a working version of Hawk with all optional dependencies and no errors. You can now use \"Run as... > Eclipse Application\" to open a nested Eclipse with the Hawk GUI running inside it.","title":"Run GUI from source"},{"location":"developers/server-from-source/","text":"In order to run the server products from the sources, you need to first install the [[Dependencies]] and follow the [[basic steps|Running from source]] for running Hawk from source. Once you have done that, to run the server product, you should open the relevant .product file. The editor will look like this one: You should use one of the buttons highlighted in red (the triangle \"Run\" button or the bug-like \"Debug\" button) to run the product for the first time. It may fail, due to the slightly buggy way in which Eclipse produces the launch configuration from the product. If you see this: !ENTRY org.eclipse.osgi 4 0 2017-04-15 13:51:14.444 !MESSAGE Application error !STACK 1 java.lang.RuntimeException: No application id has been found. That means you need to tweak the launch configuration a bit. Shutdown the server by entering shutdown and then close in the \"Console\" view, and then open the \"Run\" menu and select \"Run Configurations...\". Select the relevant \"Eclipse Application\" launch configuration and go to the \"Plug-ins\" section: Click on \"Add Required Plugins\": you'll notice that it adds quite a few things. Click on \"Run\" now: it should work fine. Eventually, you should see this text: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. You are done! You can also use \"Debug\" to track bugs in the server itself.","title":"Run Server from source"},{"location":"developers/website/","text":"The website for Eclipse Hawk is written in MkDocs . The website repository is available here: https://git.eclipse.org/c/www.eclipse.org/hawk.git/ To work on the website, clone it with your Eclipse credentials, and follow the instructions in the included README.md file.","title":"Work on the website"},{"location":"server/api-security/","text":"In some cases, we may want to protect the API from unaccounted use, as clients would have access to potentially sensitive information. In order to provide this access control, the Apache Shiro library has been integrated transparently as a filter for all incoming requests to the endpoints under /thrift . /thrift-local endpoints are not password-protected, as they only answer requests from other processes in the machine hosting the MONDO Server. Apache Shiro protects these /thrift endpoints using standard HTTP Basic authentication, which is transparent to Thrift, avoiding the need to pollute the web API with access tokens in every single method. Industrial partners will be instructed to always use the authentication layer in combination with SSL, since HTTP Basic by itself is insecure. One important advantage of Shiro is its configurability through a single .ini file, like this one: [main] # Objects and their properties are defined here, # Such as the securityManager, Realms and anything # else needed to build the SecurityManager # Note: this should be set to true in production! ssl.enabled = true # Toggle to enable/disable authentication completely authcBasic.enabled = true # Use Hawk realm mondoRealm = uk.ac.york.mondo.integration.server.users.servlet.shiro.UsersRealm securityManager.realms = $mondoRealm # We\u2019re using SHA\u2212512 for passwords, with 10k iterations credentialsMatcher = org.apache.shiro.authc.credential.Sha512CredentialsMatcher credentialsMatcher.hashIterations = 10000 mondoRealm.credentialsMatcher = $credentialsMatcher [urls] /thrift/** = ssl, authcBasic Shiro is heavily componentized, making it easy to provide alternative implementations of certain pieces and reuse the default implementations for the rest. In the shown example, all requests to the /thrift endpoints go through the default ssl and authcBasic filters: when enabled, these filters enforce the use of SSL and HTTP Basic authentication respectively. Both filters should be enabled in production environments. For the HTTP Basic authentication, the server provides its own implementation of a Shiro security realm, which is dedicated to storing and retrieving user details. The security realm uses an embedded MapDB database to persist these user details, which are managed through the Users service (Section 5.2.4). An embedded database was used in order to prevent end users from having to set up a database just to store a small set of users. MapDB is distributed as a single .jar file, making it very simple to integrate. In any case, the realm could be replaced with another one if desired by editing shiro.ini on an installation. Passwords for the MONDO realm are stored in a hashed and salted form, using 10000 iterations of SHA-512 and a random per-password salt. As for the client side, the command-line based clients accept optional arguments for the required credentials when connecting to the Thrift endpoints. If the password is omitted, the command-line based clients will require it in a separate \"silent\" prompt that does not show the characters that are typed, preventing shoulder surfing attacks. Due to limitations in the Eclipse graphical user interface, these silent prompts are only available when running the command-line based clients from a proper terminal window and not from the Eclipse \"Console\" view. The graphical clients connect to the Thrift endpoints using \u201clazy\u201d credential providers: if authentication is required, they will attempt to retrieve previously used credentials from the Eclipse secure store and if no such credentials exist, they will show an authentication dialog asking for the username and password to be used. The Eclipse secure storage takes advantage of the access control and encryption capabilities of the underlying operating system as much as possible, and makes it possible to store passwords safely and conveniently. These stored MONDO server credentials can be managed from the \"Hawk Servers\" preference page. Regarding the Artemis messaging queue, it has been secured with the same Shiro realm as the Thrift endpoints. The remote Hawk EMF abstraction (the only component that uses Artemis within the MONDO platform) will connect to Artemis with the same credentials that were used to connect to Thrift, if authentication was required.","title":"Thrift API security"},{"location":"server/api/","text":"Services \u00b6 Hawk \u00b6 The following service operations expose the capabilities of the Hawk heterogeneous model indexing framework. Hawk.createInstance \u00b6 Creates a new Hawk instance (stopped). Returns void . Takes these parameters: Name Type Documentation name string The unique name of the new Hawk instance. backend string The name of the backend to be used, as returned by listBackends(). minimumDelayMillis i32 Minimum delay between periodic synchronization in milliseconds. maximumDelayMillis i32 Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization). enabledPlugins (optional) list List of plugins to be enabled: if not set, all plugins are enabled. Hawk.listBackends \u00b6 Lists the names of the available storage backends. Returns list<string> . Does not take any parameters. Hawk.listPlugins \u00b6 Lists all the Hawk plugins that can be enabled or disabled: metamodel parsers, model parsers and graph change listeners. Returns list<string> . Does not take any parameters. Hawk.listInstances \u00b6 Lists the details of all Hawk instances. Returns list<HawkInstance> . Does not take any parameters. Hawk.removeInstance \u00b6 Removes an existing Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to remove. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. Hawk.startInstance \u00b6 Starts a stopped Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to start. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. Hawk.stopInstance \u00b6 Stops a running Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.syncInstance \u00b6 Forces an immediate synchronization on a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. blockUntilDone (optional) bool If true, blocks the call until the synchronisation completes. False by default. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.registerMetamodels \u00b6 Registers a set of file-based metamodels with a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The metamodels to register. More than one metamodel file can be provided in one request, to accomodate fragmented metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. InvalidMetamodel The provided metamodel is not valid (e.g. unparsable or inconsistent). HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.unregisterMetamodels \u00b6 Unregisters a metamodel from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The URIs of the metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listMetamodels \u00b6 Lists the URIs of the registered metamodels of a Hawk instance. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listQueryLanguages \u00b6 Lists the supported query languages and their status. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. Hawk.query \u00b6 Runs a query on a Hawk instance and returns a sequence of scalar values and/or model elements. Returns QueryResult . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. query string The query to be executed. language string The name of the query language used (e.g. EOL, OCL). options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownQueryLanguage The specified query language is not supported by the operation. InvalidQuery The specified query is not valid. FailedQuery The specified query failed to complete its execution. Hawk.resolveProxies \u00b6 Returns populated model elements for the provided proxies. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. ids list Proxy model element IDs to be resolved. options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.addRepository \u00b6 Asks a Hawk instance to start monitoring a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repo Repository The repository to monitor. credentials (optional) Credentials A valid set of credentials that has read-access to the repository. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownRepositoryType The specified repository type is not supported by the operation. VCSAuthenticationFailed The client failed to prove its identity in the VCS. Hawk.isFrozen \u00b6 Returns true if a repository is frozen, false otherwise. Returns bool . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.setFrozen \u00b6 Changes the 'frozen' state of a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to be changed. isFrozen bool Whether the repository should be frozen (true) or not (false). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.removeRepository \u00b6 Asks a Hawk instance to stop monitoring a repository and remove its elements from the graph. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to stop monitoring. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.updateRepositoryCredentials \u00b6 Changes the credentials used to monitor a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to update. cred Credentials The new credentials to be used. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listRepositories \u00b6 Lists the repositories monitored by a Hawk instance. Returns list<Repository> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listRepositoryTypes \u00b6 Lists the available repository types in this installation. Returns list<string> . Does not take any parameters. Hawk.listFiles \u00b6 Lists the paths of the files of the indexed repository. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repository list The URI of the indexed repository. filePatterns list File name patterns to search for (* lists all files). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.configurePolling \u00b6 Sets the base polling period and max interval of a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. base i32 The base polling period (in seconds). max i32 The maximum polling interval (in seconds). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidPollingConfiguration The polling configuration is not valid. Hawk.addDerivedAttribute \u00b6 Add a new derived attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the new derived attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidDerivedAttributeSpec The derived attribute specification is not valid. Hawk.removeDerivedAttribute \u00b6 Remove a derived attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the derived attribute to be removed. Only the first three fields of the spec need to be populated. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listDerivedAttributes \u00b6 Lists the derived attributes of a Hawk instance. Only the first three fields of the spec are currently populated. Returns list<DerivedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.addIndexedAttribute \u00b6 Add a new indexed attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the new indexed attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidIndexedAttributeSpec The indexed attribute specification is not valid. Hawk.removeIndexedAttribute \u00b6 Remove a indexed attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the indexed attribute to be removed. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listIndexedAttributes \u00b6 Lists the indexed attributes of a Hawk instance. Returns list<IndexedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.getModel \u00b6 Returns the contents of one or more models indexed in a Hawk instance. Cross-model references are also resolved, and contained objects are always sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.getRootElements \u00b6 Returns the root objects of one or more models indexed in a Hawk instance. Node IDs are always sent, and contained objects are never sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. Hawk.watchStateChanges \u00b6 Returns subscription details to a queue of HawkStateEvents with notifications about changes in the indexer's state. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.watchModelChanges \u00b6 Returns subscription details to a queue of HawkChangeEvents with notifications about changes to a set of indexed models. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repositoryUri string The URI of the repository in which the model is contained. filePath list The pattern(s) for the model file(s) in the repository. clientID string Unique client ID (used as suffix for the queue name). durableEvents SubscriptionDurability Durability of the subscription. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. IFCExport \u00b6 IFC export facility for getting IFC models from the Hawk server. IFCExport.exportAsSTEP \u00b6 Export part of a Hawk index in IFC STEP format. Returns IFCExportJob . Takes these parameters: Name Type Documentation hawkInstance string options IFCExportOptions IFCExport.getJobs \u00b6 List all the previously scheduled IFC export jobs. Returns list<IFCExportJob> . Does not take any parameters. IFCExport.getJobStatus \u00b6 Retrieve the current status of the job with the specified ID. Returns IFCExportJob . Takes these parameters: Name Type Documentation jobID string IFCExport.killJob \u00b6 Cancel the job with the specified ID. Returns bool . Takes these parameters: Name Type Documentation jobID string Users \u00b6 The majority of service operations provided by the server require user authentication (indicated in the top-left cell of each operation table) to prevent unaccountable use. As such, the platform needs to provide basic user management service operations for creating, updating and deleting user accounts. When handling passwords, only SSL should be used, as otherwise they could be intercepted. Users.createUser \u00b6 Creates a new platform user. Returns void . Takes these parameters: Name Type Documentation username string A unique identifier for the user. password string The desired password. profile UserProfile The profile of the user. May throw these exceptions: Name Documentation UserExists The specified username already exists. Users.updateProfile \u00b6 Updates the profile of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. profile UserProfile The updated profile of the user. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Users.updatePassword \u00b6 Updates the password of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. newPassword string New password to be set. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Users.deleteUser \u00b6 Deletes a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to delete. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Entities \u00b6 AttributeSlot \u00b6 Represents a slot that can store the value(s) of an attribute of a model element. Inherits from: Slot. Name Type Documentation name (inherited) string The name of the model element property the value of which is stored in this slot. value (optional) SlotValue Value of the slot (if set). Used in: ModelElement. CommitItem \u00b6 Simplified entry within a commit of a repository. Name Type Documentation path string Path within the repository, using / as separator. repoURL string URL of the repository. revision string Unique identifier of the revision of the repository. type CommitItemChangeType Type of change within the commit. Used in: HawkModelElementAdditionEvent, HawkModelElementRemovalEvent, HawkAttributeUpdateEvent, HawkAttributeRemovalEvent, HawkReferenceAdditionEvent, HawkReferenceRemovalEvent, HawkFileAdditionEvent, HawkFileRemovalEvent. ContainerSlot \u00b6 Represents a slot that can store other model elements within a model element. Inherits from: Slot. Name Type Documentation elements list Contained elements for this slot. name (inherited) string The name of the model element property the value of which is stored in this slot. Used in: ModelElement. Credentials \u00b6 Credentials of the client in the target VCS. Name Type Documentation password string Password for logging into the VCS. username string Username for logging into the VCS. Used in: Hawk.addRepository, Hawk.updateRepositoryCredentials. DerivedAttributeSpec \u00b6 Used to configure Hawk's derived attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the derived attribute. attributeType (optional) string The (primitive) type of the derived attribute. derivationLanguage (optional) string The language used to express the derivation logic. derivationLogic (optional) string An executable expression of the derivation logic in the language above. isMany (optional) bool The multiplicity of the derived attribute. isOrdered (optional) bool A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true). isUnique (optional) bool A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true). metamodelUri string The URI of the metamodel to which the derived attribute belongs. typeName string The name of the type to which the derived attribute belongs. Used in: Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes. EffectiveMetamodel \u00b6 Representation of a set of rules for either including or excluding certain types and/or slots within a metamodel. Name Type Documentation slots set Slots within the type that should be included or excluded: empty means 'all slots'. type string Type that should be included or excluded. Used in: EffectiveMetamodelMap. EffectiveMetamodelMap \u00b6 Representation of a set of rules for either including or excluding metamodels, types or slots. Name Type Documentation metamodel map > Types and slots within the metamodel that should be included or excluded: empty means 'all types and slots'. uri string Namespace URI of the metamodel. Used in: HawkQueryOptions, IFCExportOptions. File \u00b6 A file to be sent through the network. Name Type Documentation contents binary Sequence of bytes with the contents of the file. name string Name of the file. Used in: Hawk.registerMetamodels. HawkAttributeRemovalEvent \u00b6 Serialized form of an attribute removal event. Name Type Documentation attribute string Name of the attribute that was removed. id string Identifier of the model element that was changed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkAttributeUpdateEvent \u00b6 Serialized form of an attribute update event. Name Type Documentation attribute string Name of the attribute that was changed. id string Identifier of the model element that was changed. value SlotValue New value for the attribute. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkChangeEvent \u00b6 Serialized form of a change in the indexed models of a Hawk instance. Name Type Documentation fileAddition HawkFileAdditionEvent A file was added. fileRemoval HawkFileRemovalEvent A file was removed. modelElementAddition HawkModelElementAdditionEvent A model element was added. modelElementAttributeRemoval HawkAttributeRemovalEvent An attribute was removed. modelElementAttributeUpdate HawkAttributeUpdateEvent An attribute was updated. modelElementRemoval HawkModelElementRemovalEvent A model element was removed. referenceAddition HawkReferenceAdditionEvent A reference was added. referenceRemoval HawkReferenceRemovalEvent A reference was removed. syncEnd HawkSynchronizationEndEvent Synchronization ended. syncStart HawkSynchronizationStartEvent Synchronization started. HawkFileAdditionEvent \u00b6 Serialized form of a file addition event. Name Type Documentation vcsItem CommitItem Reference to file that was added, including VCS metadata. Used in: HawkChangeEvent. HawkFileRemovalEvent \u00b6 A file was removed. Name Type Documentation vcsItem CommitItem Reference to file that was removed, including VCS metadata. Used in: HawkChangeEvent. HawkInstance \u00b6 Status of a Hawk instance. Name Type Documentation message string Last info message from the instance. name string The name of the instance. state HawkState Current state of the instance. Used in: Hawk.listInstances. HawkModelElementAdditionEvent \u00b6 Serialized form of a model element addition event. Name Type Documentation id string Identifier of the model element that was added. metamodelURI string Metamodel URI of the type of the model element. typeName string Name of the type of the model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkModelElementRemovalEvent \u00b6 Serialized form of a model element removal event. Name Type Documentation id string Identifier of the model element that was removed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkQueryOptions \u00b6 Options for a Hawk query. Name Type Documentation defaultNamespaces (optional) string The default namespaces to be used to resolve ambiguous unqualified types. effectiveMetamodelExcludes (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. effectiveMetamodelIncludes (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeAttributes (optional) bool Whether to include attributes (true) or not (false) in model element results. includeContained (optional) bool Whether to include all the child elements of the model element results (true) or not (false). includeDerived (optional) bool Whether to include derived attributes (true) or not (false) in model element results. includeNodeIDs (optional) bool Whether to include node IDs (true) or not (false) in model element results. includeReferences (optional) bool Whether to include references (true) or not (false) in model element results. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: Hawk.query, Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements. HawkReferenceAdditionEvent \u00b6 Serialized form of a reference addition event. Name Type Documentation refName string Name of the reference that was added. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkReferenceRemovalEvent \u00b6 Serialized form of a reference removal event. Name Type Documentation refName string Name of the reference that was removed. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkStateEvent \u00b6 Serialized form of a change in the state of a Hawk instance. Name Type Documentation message string Short message about the current status of the server. state HawkState State of the Hawk instance. timestamp i64 Timestamp for this state change. HawkSynchronizationEndEvent \u00b6 Serialized form of a sync end event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent. HawkSynchronizationStartEvent \u00b6 Serialized form of a sync start event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent. IFCExportJob \u00b6 Information about a server-side IFC export job. Name Type Documentation jobID string message string status IFCExportStatus Used in: IFCExport.exportAsSTEP, IFCExport.getJobs, IFCExport.getJobStatus. IFCExportOptions \u00b6 Options for a server-side IFC export. Name Type Documentation excludeRules (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeRules (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: IFCExport.exportAsSTEP. IndexedAttributeSpec \u00b6 Used to configure Hawk's indexed attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the indexed attribute. metamodelUri string The URI of the metamodel to which the indexed attribute belongs. typeName string The name of the type to which the indexed attribute belongs. Used in: Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes. InvalidModelSpec \u00b6 The model specification is not valid: the model or the metamodels are inaccessible or invalid. Name Type Documentation reason string Reason for the spec not being valid. spec ModelSpec A copy of the invalid model specification. InvalidTransformation \u00b6 The transformation is not valid: it is unparsable or inconsistent. Name Type Documentation location string Location of the problem, if applicable. Usually a combination of line and column numbers. reason string Reason for the transformation not being valid. MixedReference \u00b6 Represents a reference to a model element: it can be an identifier or a position. Only used when the same ReferenceSlot has both identifier-based and position-based references. This may be the case if we are retrieving a subset of the model which has references between its elements and with elements outside the subset at the same time. Name Type Documentation id string Identifier-based reference to a model element. position i32 Position-based reference to a model element. Used in: ReferenceSlot. ModelElement \u00b6 Represents a model element. Name Type Documentation attributes (optional) list Slots holding the values of the model element's attributes, if any have been set. containers (optional) list Slots holding contained model elements, if any have been set. file (optional) string Name of the file to which the element belongs (not set if equal to that of the previous model element). id (optional) string Unique ID of the model element (not set if using position-based references). metamodelUri (optional) string URI of the metamodel to which the type of the element belongs (not set if equal to that of the previous model element). references (optional) list Slots holding the values of the model element's references, if any have been set. repositoryURL (optional) string URI of the repository to which the element belongs (not set if equal to that of the previous model element). typeName (optional) string Name of the type that the model element is an instance of (not set if equal to that of the previous model element). Used in: Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements, ContainerSlot, QueryResult. ModelElementType \u00b6 Represents a type of model element. Name Type Documentation attributes (optional) list Metadata for the attribute slots. id string Unique ID of the model element type. metamodelUri string URI of the metamodel to which the type belongs. references (optional) list Metadata for the reference slots. typeName string Name of the type. Used in: QueryResult. ModelSpec \u00b6 Captures information about source/target models of ATL transformations. Name Type Documentation metamodelUris list The URIs of the metamodels to which elements of the model conform. uri string The URI from which the model will be loaded or to which it will be persisted. Used in: InvalidModelSpec. QueryResult \u00b6 Union type for a scalar value, a reference to a model element, a heterogeneous list or a string/value map. Query results may return all types of results, so we need to stay flexible. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vByte (inherited) byte 8-bit signed integer value. vDouble (inherited) double 64-bit floating point value. vInteger (inherited) i32 32-bit signed integer value. vList list Nested list of query results. vLong (inherited) i64 64-bit signed integer value. vMap map Map between query results. vModelElement ModelElement Encoded model element. vModelElementType ModelElementType Encoded model element type. vShort (inherited) i16 16-bit signed integer value. vString (inherited) string Sequence of UTF8 characters. Used in: Hawk.query, QueryResult, QueryResultMap. QueryResultMap \u00b6 Name Type Documentation name string value QueryResult Used in: QueryResult. ReferenceSlot \u00b6 Represents a slot that can store the value(s) of a reference of a model element. References can be expressed as positions within a result tree (using pre-order traversal) or IDs. id, ids, position, positions and mixed are all mutually exclusive. At least one position or one ID must be given. Inherits from: Slot. Name Type Documentation id (optional) string Unique identifier of the referenced element (if there is only one ID based reference in this slot). ids (optional) list Unique identifiers of the referenced elements (if more than one). mixed (optional) list Mix of identifier- and position-bsaed references (if there is at least one position and one ID). name (inherited) string The name of the model element property the value of which is stored in this slot. position (optional) i32 Position of the referenced element (if there is only one position-based reference in this slot). positions (optional) list Positions of the referenced elements (if more than one). Used in: ModelElement. Repository \u00b6 Entity that represents a model repository. Name Type Documentation isFrozen (optional) bool True if the repository is frozen, false otherwise. type string The type of repository. uri string The URI to the repository. Used in: Hawk.addRepository, Hawk.listRepositories. Slot \u00b6 Represents a slot that can store the value(s) of a property of a model element. Inherited by: AttributeSlot, ReferenceSlot, ContainerSlot. Name Type Documentation name string The name of the model element property the value of which is stored in this slot. SlotMetadata \u00b6 Represents the metadata of a slot in a model element type. Name Type Documentation isMany bool True if this slot holds a collection of values instead of a single value. isOrdered bool True if the values in this slot are ordered. isUnique bool True if the value of this slot must be unique within its containing model. name string The name of the model element property that is stored in this slot. type string The type of the values in this slot. Used in: ModelElementType. SlotValue \u00b6 Union type for a single scalar value or a homogeneous collection of scalar values. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vBooleans list List of true/false values. vByte (inherited) byte 8-bit signed integer value. vBytes binary List of 8-bit signed integers. vDouble (inherited) double 64-bit floating point value. vDoubles list List of 64-bit floating point values. vInteger (inherited) i32 32-bit signed integer value. vIntegers list List of 32-bit signed integers. vLong (inherited) i64 64-bit signed integer value. vLongs list List of 64-bit signed integers. vShort (inherited) i16 16-bit signed integer value. vShorts list List of 16-bit signed integers. vString (inherited) string Sequence of UTF8 characters. vStrings list List of sequences of UTF8 characters. Used in: HawkAttributeUpdateEvent, AttributeSlot. Subscription \u00b6 Details about a subscription to a topic queue. Name Type Documentation host string Host name of the message queue server. port i32 Port in which the message queue server is listening. queueAddress string Address of the topic queue. queueName string Name of the topic queue. sslRequired bool Whether SSL is required or not. Used in: Hawk.watchStateChanges, Hawk.watchModelChanges. UserProfile \u00b6 Minimal details about registered users. Name Type Documentation admin bool Whether the user has admin rights (i.e. so that they can create new users, change the status of admin users etc). realName string The real name of the user. Used in: Users.createUser, Users.updateProfile. Value \u00b6 Union type for a single scalar value. Inherited by: QueryResult, SlotValue. Name Type Documentation vBoolean bool Boolean (true/false) value. vByte byte 8-bit signed integer value. vDouble double 64-bit floating point value. vInteger i32 32-bit signed integer value. vLong i64 64-bit signed integer value. vShort i16 16-bit signed integer value. vString string Sequence of UTF8 characters. Enumerations \u00b6 CommitItemChangeType \u00b6 Type of change within a commit. Name Documentation ADDED File was added. DELETED File was removed. REPLACED File was removed. UNKNOWN Unknown type of change. UPDATED File was updated. HawkState \u00b6 One of the states that a Hawk instance can be in. Name Documentation RUNNING The instance is running and monitoring the indexed locations. STOPPED The instance is stopped and is not monitoring any indexed locations. UPDATING The instance is updating its contents from the indexed locations. IFCExportStatus \u00b6 Status of a server-side IFC export job. Name Documentation CANCELLED The job has been cancelled. DONE The job is completed. FAILED The job has failed. RUNNING The job is currently running. SCHEDULED The job has been scheduled but has not started yet. SubscriptionDurability \u00b6 Durability of a subscription. Name Documentation DEFAULT Subscription survives client disconnections but not server restarts. DURABLE Subscription survives client disconnections and server restarts. TEMPORARY Subscription removed after disconnecting. ## Exceptions FailedQuery \u00b6 The specified query failed to complete its execution. Name Type Documentation reason string Reason for the query failing to complete its execution. Used in: Hawk.query. HawkInstanceNotFound \u00b6 No Hawk instance exists with that name. No fields for this entity. Used in: Hawk.removeInstance, Hawk.startInstance, Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges. HawkInstanceNotRunning \u00b6 The selected Hawk instance is not running. No fields for this entity. Used in: Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges. InvalidDerivedAttributeSpec \u00b6 The derived attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addDerivedAttribute. InvalidIndexedAttributeSpec \u00b6 The indexed attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addIndexedAttribute. InvalidMetamodel \u00b6 The provided metamodel is not valid (e.g. unparsable or inconsistent). Name Type Documentation reason string Reason for the metamodel not being valid. Used in: Hawk.registerMetamodels. InvalidPollingConfiguration \u00b6 The polling configuration is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.configurePolling. InvalidQuery \u00b6 The specified query is not valid. Name Type Documentation reason string Reason for the query not being valid. Used in: Hawk.query. UnknownQueryLanguage \u00b6 The specified query language is not supported by the operation. No fields for this entity. Used in: Hawk.query. UnknownRepositoryType \u00b6 The specified repository type is not supported by the operation. No fields for this entity. Used in: Hawk.addRepository. UserExists \u00b6 The specified username already exists. No fields for this entity. Used in: Users.createUser. UserNotFound \u00b6 The specified username does not exist. No fields for this entity. Used in: Users.updateProfile, Users.updatePassword, Users.deleteUser. VCSAuthenticationFailed \u00b6 The client failed to prove its identity in the VCS. No fields for this entity. Used in: Hawk.addRepository. This file was automatically generated by Ecore2Thrift. https://github.com/bluezio/ecore2thrift","title":"Thrift API"},{"location":"server/api/#services","text":"","title":"Services"},{"location":"server/api/#hawk","text":"The following service operations expose the capabilities of the Hawk heterogeneous model indexing framework.","title":"Hawk"},{"location":"server/api/#hawkcreateinstance","text":"Creates a new Hawk instance (stopped). Returns void . Takes these parameters: Name Type Documentation name string The unique name of the new Hawk instance. backend string The name of the backend to be used, as returned by listBackends(). minimumDelayMillis i32 Minimum delay between periodic synchronization in milliseconds. maximumDelayMillis i32 Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization). enabledPlugins (optional) list List of plugins to be enabled: if not set, all plugins are enabled.","title":"Hawk.createInstance"},{"location":"server/api/#hawklistbackends","text":"Lists the names of the available storage backends. Returns list<string> . Does not take any parameters.","title":"Hawk.listBackends"},{"location":"server/api/#hawklistplugins","text":"Lists all the Hawk plugins that can be enabled or disabled: metamodel parsers, model parsers and graph change listeners. Returns list<string> . Does not take any parameters.","title":"Hawk.listPlugins"},{"location":"server/api/#hawklistinstances","text":"Lists the details of all Hawk instances. Returns list<HawkInstance> . Does not take any parameters.","title":"Hawk.listInstances"},{"location":"server/api/#hawkremoveinstance","text":"Removes an existing Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to remove. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name.","title":"Hawk.removeInstance"},{"location":"server/api/#hawkstartinstance","text":"Starts a stopped Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to start. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name.","title":"Hawk.startInstance"},{"location":"server/api/#hawkstopinstance","text":"Stops a running Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.stopInstance"},{"location":"server/api/#hawksyncinstance","text":"Forces an immediate synchronization on a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. blockUntilDone (optional) bool If true, blocks the call until the synchronisation completes. False by default. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.syncInstance"},{"location":"server/api/#hawkregistermetamodels","text":"Registers a set of file-based metamodels with a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The metamodels to register. More than one metamodel file can be provided in one request, to accomodate fragmented metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. InvalidMetamodel The provided metamodel is not valid (e.g. unparsable or inconsistent). HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.registerMetamodels"},{"location":"server/api/#hawkunregistermetamodels","text":"Unregisters a metamodel from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The URIs of the metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.unregisterMetamodels"},{"location":"server/api/#hawklistmetamodels","text":"Lists the URIs of the registered metamodels of a Hawk instance. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listMetamodels"},{"location":"server/api/#hawklistquerylanguages","text":"Lists the supported query languages and their status. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance.","title":"Hawk.listQueryLanguages"},{"location":"server/api/#hawkquery","text":"Runs a query on a Hawk instance and returns a sequence of scalar values and/or model elements. Returns QueryResult . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. query string The query to be executed. language string The name of the query language used (e.g. EOL, OCL). options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownQueryLanguage The specified query language is not supported by the operation. InvalidQuery The specified query is not valid. FailedQuery The specified query failed to complete its execution.","title":"Hawk.query"},{"location":"server/api/#hawkresolveproxies","text":"Returns populated model elements for the provided proxies. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. ids list Proxy model element IDs to be resolved. options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.resolveProxies"},{"location":"server/api/#hawkaddrepository","text":"Asks a Hawk instance to start monitoring a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repo Repository The repository to monitor. credentials (optional) Credentials A valid set of credentials that has read-access to the repository. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownRepositoryType The specified repository type is not supported by the operation. VCSAuthenticationFailed The client failed to prove its identity in the VCS.","title":"Hawk.addRepository"},{"location":"server/api/#hawkisfrozen","text":"Returns true if a repository is frozen, false otherwise. Returns bool . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.isFrozen"},{"location":"server/api/#hawksetfrozen","text":"Changes the 'frozen' state of a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to be changed. isFrozen bool Whether the repository should be frozen (true) or not (false). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.setFrozen"},{"location":"server/api/#hawkremoverepository","text":"Asks a Hawk instance to stop monitoring a repository and remove its elements from the graph. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to stop monitoring. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeRepository"},{"location":"server/api/#hawkupdaterepositorycredentials","text":"Changes the credentials used to monitor a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to update. cred Credentials The new credentials to be used. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.updateRepositoryCredentials"},{"location":"server/api/#hawklistrepositories","text":"Lists the repositories monitored by a Hawk instance. Returns list<Repository> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listRepositories"},{"location":"server/api/#hawklistrepositorytypes","text":"Lists the available repository types in this installation. Returns list<string> . Does not take any parameters.","title":"Hawk.listRepositoryTypes"},{"location":"server/api/#hawklistfiles","text":"Lists the paths of the files of the indexed repository. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repository list The URI of the indexed repository. filePatterns list File name patterns to search for (* lists all files). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listFiles"},{"location":"server/api/#hawkconfigurepolling","text":"Sets the base polling period and max interval of a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. base i32 The base polling period (in seconds). max i32 The maximum polling interval (in seconds). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidPollingConfiguration The polling configuration is not valid.","title":"Hawk.configurePolling"},{"location":"server/api/#hawkaddderivedattribute","text":"Add a new derived attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the new derived attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidDerivedAttributeSpec The derived attribute specification is not valid.","title":"Hawk.addDerivedAttribute"},{"location":"server/api/#hawkremovederivedattribute","text":"Remove a derived attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the derived attribute to be removed. Only the first three fields of the spec need to be populated. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeDerivedAttribute"},{"location":"server/api/#hawklistderivedattributes","text":"Lists the derived attributes of a Hawk instance. Only the first three fields of the spec are currently populated. Returns list<DerivedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listDerivedAttributes"},{"location":"server/api/#hawkaddindexedattribute","text":"Add a new indexed attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the new indexed attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidIndexedAttributeSpec The indexed attribute specification is not valid.","title":"Hawk.addIndexedAttribute"},{"location":"server/api/#hawkremoveindexedattribute","text":"Remove a indexed attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the indexed attribute to be removed. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeIndexedAttribute"},{"location":"server/api/#hawklistindexedattributes","text":"Lists the indexed attributes of a Hawk instance. Returns list<IndexedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listIndexedAttributes"},{"location":"server/api/#hawkgetmodel","text":"Returns the contents of one or more models indexed in a Hawk instance. Cross-model references are also resolved, and contained objects are always sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.getModel"},{"location":"server/api/#hawkgetrootelements","text":"Returns the root objects of one or more models indexed in a Hawk instance. Node IDs are always sent, and contained objects are never sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent.","title":"Hawk.getRootElements"},{"location":"server/api/#hawkwatchstatechanges","text":"Returns subscription details to a queue of HawkStateEvents with notifications about changes in the indexer's state. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.watchStateChanges"},{"location":"server/api/#hawkwatchmodelchanges","text":"Returns subscription details to a queue of HawkChangeEvents with notifications about changes to a set of indexed models. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repositoryUri string The URI of the repository in which the model is contained. filePath list The pattern(s) for the model file(s) in the repository. clientID string Unique client ID (used as suffix for the queue name). durableEvents SubscriptionDurability Durability of the subscription. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.watchModelChanges"},{"location":"server/api/#ifcexport","text":"IFC export facility for getting IFC models from the Hawk server.","title":"IFCExport"},{"location":"server/api/#ifcexportexportasstep","text":"Export part of a Hawk index in IFC STEP format. Returns IFCExportJob . Takes these parameters: Name Type Documentation hawkInstance string options IFCExportOptions","title":"IFCExport.exportAsSTEP"},{"location":"server/api/#ifcexportgetjobs","text":"List all the previously scheduled IFC export jobs. Returns list<IFCExportJob> . Does not take any parameters.","title":"IFCExport.getJobs"},{"location":"server/api/#ifcexportgetjobstatus","text":"Retrieve the current status of the job with the specified ID. Returns IFCExportJob . Takes these parameters: Name Type Documentation jobID string","title":"IFCExport.getJobStatus"},{"location":"server/api/#ifcexportkilljob","text":"Cancel the job with the specified ID. Returns bool . Takes these parameters: Name Type Documentation jobID string","title":"IFCExport.killJob"},{"location":"server/api/#users","text":"The majority of service operations provided by the server require user authentication (indicated in the top-left cell of each operation table) to prevent unaccountable use. As such, the platform needs to provide basic user management service operations for creating, updating and deleting user accounts. When handling passwords, only SSL should be used, as otherwise they could be intercepted.","title":"Users"},{"location":"server/api/#userscreateuser","text":"Creates a new platform user. Returns void . Takes these parameters: Name Type Documentation username string A unique identifier for the user. password string The desired password. profile UserProfile The profile of the user. May throw these exceptions: Name Documentation UserExists The specified username already exists.","title":"Users.createUser"},{"location":"server/api/#usersupdateprofile","text":"Updates the profile of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. profile UserProfile The updated profile of the user. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.updateProfile"},{"location":"server/api/#usersupdatepassword","text":"Updates the password of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. newPassword string New password to be set. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.updatePassword"},{"location":"server/api/#usersdeleteuser","text":"Deletes a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to delete. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.deleteUser"},{"location":"server/api/#entities","text":"","title":"Entities"},{"location":"server/api/#attributeslot","text":"Represents a slot that can store the value(s) of an attribute of a model element. Inherits from: Slot. Name Type Documentation name (inherited) string The name of the model element property the value of which is stored in this slot. value (optional) SlotValue Value of the slot (if set). Used in: ModelElement.","title":"AttributeSlot"},{"location":"server/api/#commititem","text":"Simplified entry within a commit of a repository. Name Type Documentation path string Path within the repository, using / as separator. repoURL string URL of the repository. revision string Unique identifier of the revision of the repository. type CommitItemChangeType Type of change within the commit. Used in: HawkModelElementAdditionEvent, HawkModelElementRemovalEvent, HawkAttributeUpdateEvent, HawkAttributeRemovalEvent, HawkReferenceAdditionEvent, HawkReferenceRemovalEvent, HawkFileAdditionEvent, HawkFileRemovalEvent.","title":"CommitItem"},{"location":"server/api/#containerslot","text":"Represents a slot that can store other model elements within a model element. Inherits from: Slot. Name Type Documentation elements list Contained elements for this slot. name (inherited) string The name of the model element property the value of which is stored in this slot. Used in: ModelElement.","title":"ContainerSlot"},{"location":"server/api/#credentials","text":"Credentials of the client in the target VCS. Name Type Documentation password string Password for logging into the VCS. username string Username for logging into the VCS. Used in: Hawk.addRepository, Hawk.updateRepositoryCredentials.","title":"Credentials"},{"location":"server/api/#derivedattributespec","text":"Used to configure Hawk's derived attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the derived attribute. attributeType (optional) string The (primitive) type of the derived attribute. derivationLanguage (optional) string The language used to express the derivation logic. derivationLogic (optional) string An executable expression of the derivation logic in the language above. isMany (optional) bool The multiplicity of the derived attribute. isOrdered (optional) bool A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true). isUnique (optional) bool A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true). metamodelUri string The URI of the metamodel to which the derived attribute belongs. typeName string The name of the type to which the derived attribute belongs. Used in: Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes.","title":"DerivedAttributeSpec"},{"location":"server/api/#effectivemetamodel","text":"Representation of a set of rules for either including or excluding certain types and/or slots within a metamodel. Name Type Documentation slots set Slots within the type that should be included or excluded: empty means 'all slots'. type string Type that should be included or excluded. Used in: EffectiveMetamodelMap.","title":"EffectiveMetamodel"},{"location":"server/api/#effectivemetamodelmap","text":"Representation of a set of rules for either including or excluding metamodels, types or slots. Name Type Documentation metamodel map > Types and slots within the metamodel that should be included or excluded: empty means 'all types and slots'. uri string Namespace URI of the metamodel. Used in: HawkQueryOptions, IFCExportOptions.","title":"EffectiveMetamodelMap"},{"location":"server/api/#file","text":"A file to be sent through the network. Name Type Documentation contents binary Sequence of bytes with the contents of the file. name string Name of the file. Used in: Hawk.registerMetamodels.","title":"File"},{"location":"server/api/#hawkattributeremovalevent","text":"Serialized form of an attribute removal event. Name Type Documentation attribute string Name of the attribute that was removed. id string Identifier of the model element that was changed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkAttributeRemovalEvent"},{"location":"server/api/#hawkattributeupdateevent","text":"Serialized form of an attribute update event. Name Type Documentation attribute string Name of the attribute that was changed. id string Identifier of the model element that was changed. value SlotValue New value for the attribute. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkAttributeUpdateEvent"},{"location":"server/api/#hawkchangeevent","text":"Serialized form of a change in the indexed models of a Hawk instance. Name Type Documentation fileAddition HawkFileAdditionEvent A file was added. fileRemoval HawkFileRemovalEvent A file was removed. modelElementAddition HawkModelElementAdditionEvent A model element was added. modelElementAttributeRemoval HawkAttributeRemovalEvent An attribute was removed. modelElementAttributeUpdate HawkAttributeUpdateEvent An attribute was updated. modelElementRemoval HawkModelElementRemovalEvent A model element was removed. referenceAddition HawkReferenceAdditionEvent A reference was added. referenceRemoval HawkReferenceRemovalEvent A reference was removed. syncEnd HawkSynchronizationEndEvent Synchronization ended. syncStart HawkSynchronizationStartEvent Synchronization started.","title":"HawkChangeEvent"},{"location":"server/api/#hawkfileadditionevent","text":"Serialized form of a file addition event. Name Type Documentation vcsItem CommitItem Reference to file that was added, including VCS metadata. Used in: HawkChangeEvent.","title":"HawkFileAdditionEvent"},{"location":"server/api/#hawkfileremovalevent","text":"A file was removed. Name Type Documentation vcsItem CommitItem Reference to file that was removed, including VCS metadata. Used in: HawkChangeEvent.","title":"HawkFileRemovalEvent"},{"location":"server/api/#hawkinstance","text":"Status of a Hawk instance. Name Type Documentation message string Last info message from the instance. name string The name of the instance. state HawkState Current state of the instance. Used in: Hawk.listInstances.","title":"HawkInstance"},{"location":"server/api/#hawkmodelelementadditionevent","text":"Serialized form of a model element addition event. Name Type Documentation id string Identifier of the model element that was added. metamodelURI string Metamodel URI of the type of the model element. typeName string Name of the type of the model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkModelElementAdditionEvent"},{"location":"server/api/#hawkmodelelementremovalevent","text":"Serialized form of a model element removal event. Name Type Documentation id string Identifier of the model element that was removed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkModelElementRemovalEvent"},{"location":"server/api/#hawkqueryoptions","text":"Options for a Hawk query. Name Type Documentation defaultNamespaces (optional) string The default namespaces to be used to resolve ambiguous unqualified types. effectiveMetamodelExcludes (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. effectiveMetamodelIncludes (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeAttributes (optional) bool Whether to include attributes (true) or not (false) in model element results. includeContained (optional) bool Whether to include all the child elements of the model element results (true) or not (false). includeDerived (optional) bool Whether to include derived attributes (true) or not (false) in model element results. includeNodeIDs (optional) bool Whether to include node IDs (true) or not (false) in model element results. includeReferences (optional) bool Whether to include references (true) or not (false) in model element results. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: Hawk.query, Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements.","title":"HawkQueryOptions"},{"location":"server/api/#hawkreferenceadditionevent","text":"Serialized form of a reference addition event. Name Type Documentation refName string Name of the reference that was added. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkReferenceAdditionEvent"},{"location":"server/api/#hawkreferenceremovalevent","text":"Serialized form of a reference removal event. Name Type Documentation refName string Name of the reference that was removed. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkReferenceRemovalEvent"},{"location":"server/api/#hawkstateevent","text":"Serialized form of a change in the state of a Hawk instance. Name Type Documentation message string Short message about the current status of the server. state HawkState State of the Hawk instance. timestamp i64 Timestamp for this state change.","title":"HawkStateEvent"},{"location":"server/api/#hawksynchronizationendevent","text":"Serialized form of a sync end event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent.","title":"HawkSynchronizationEndEvent"},{"location":"server/api/#hawksynchronizationstartevent","text":"Serialized form of a sync start event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent.","title":"HawkSynchronizationStartEvent"},{"location":"server/api/#ifcexportjob","text":"Information about a server-side IFC export job. Name Type Documentation jobID string message string status IFCExportStatus Used in: IFCExport.exportAsSTEP, IFCExport.getJobs, IFCExport.getJobStatus.","title":"IFCExportJob"},{"location":"server/api/#ifcexportoptions","text":"Options for a server-side IFC export. Name Type Documentation excludeRules (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeRules (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: IFCExport.exportAsSTEP.","title":"IFCExportOptions"},{"location":"server/api/#indexedattributespec","text":"Used to configure Hawk's indexed attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the indexed attribute. metamodelUri string The URI of the metamodel to which the indexed attribute belongs. typeName string The name of the type to which the indexed attribute belongs. Used in: Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes.","title":"IndexedAttributeSpec"},{"location":"server/api/#invalidmodelspec","text":"The model specification is not valid: the model or the metamodels are inaccessible or invalid. Name Type Documentation reason string Reason for the spec not being valid. spec ModelSpec A copy of the invalid model specification.","title":"InvalidModelSpec"},{"location":"server/api/#invalidtransformation","text":"The transformation is not valid: it is unparsable or inconsistent. Name Type Documentation location string Location of the problem, if applicable. Usually a combination of line and column numbers. reason string Reason for the transformation not being valid.","title":"InvalidTransformation"},{"location":"server/api/#mixedreference","text":"Represents a reference to a model element: it can be an identifier or a position. Only used when the same ReferenceSlot has both identifier-based and position-based references. This may be the case if we are retrieving a subset of the model which has references between its elements and with elements outside the subset at the same time. Name Type Documentation id string Identifier-based reference to a model element. position i32 Position-based reference to a model element. Used in: ReferenceSlot.","title":"MixedReference"},{"location":"server/api/#modelelement","text":"Represents a model element. Name Type Documentation attributes (optional) list Slots holding the values of the model element's attributes, if any have been set. containers (optional) list Slots holding contained model elements, if any have been set. file (optional) string Name of the file to which the element belongs (not set if equal to that of the previous model element). id (optional) string Unique ID of the model element (not set if using position-based references). metamodelUri (optional) string URI of the metamodel to which the type of the element belongs (not set if equal to that of the previous model element). references (optional) list Slots holding the values of the model element's references, if any have been set. repositoryURL (optional) string URI of the repository to which the element belongs (not set if equal to that of the previous model element). typeName (optional) string Name of the type that the model element is an instance of (not set if equal to that of the previous model element). Used in: Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements, ContainerSlot, QueryResult.","title":"ModelElement"},{"location":"server/api/#modelelementtype","text":"Represents a type of model element. Name Type Documentation attributes (optional) list Metadata for the attribute slots. id string Unique ID of the model element type. metamodelUri string URI of the metamodel to which the type belongs. references (optional) list Metadata for the reference slots. typeName string Name of the type. Used in: QueryResult.","title":"ModelElementType"},{"location":"server/api/#modelspec","text":"Captures information about source/target models of ATL transformations. Name Type Documentation metamodelUris list The URIs of the metamodels to which elements of the model conform. uri string The URI from which the model will be loaded or to which it will be persisted. Used in: InvalidModelSpec.","title":"ModelSpec"},{"location":"server/api/#queryresult","text":"Union type for a scalar value, a reference to a model element, a heterogeneous list or a string/value map. Query results may return all types of results, so we need to stay flexible. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vByte (inherited) byte 8-bit signed integer value. vDouble (inherited) double 64-bit floating point value. vInteger (inherited) i32 32-bit signed integer value. vList list Nested list of query results. vLong (inherited) i64 64-bit signed integer value. vMap map Map between query results. vModelElement ModelElement Encoded model element. vModelElementType ModelElementType Encoded model element type. vShort (inherited) i16 16-bit signed integer value. vString (inherited) string Sequence of UTF8 characters. Used in: Hawk.query, QueryResult, QueryResultMap.","title":"QueryResult"},{"location":"server/api/#queryresultmap","text":"Name Type Documentation name string value QueryResult Used in: QueryResult.","title":"QueryResultMap"},{"location":"server/api/#referenceslot","text":"Represents a slot that can store the value(s) of a reference of a model element. References can be expressed as positions within a result tree (using pre-order traversal) or IDs. id, ids, position, positions and mixed are all mutually exclusive. At least one position or one ID must be given. Inherits from: Slot. Name Type Documentation id (optional) string Unique identifier of the referenced element (if there is only one ID based reference in this slot). ids (optional) list Unique identifiers of the referenced elements (if more than one). mixed (optional) list Mix of identifier- and position-bsaed references (if there is at least one position and one ID). name (inherited) string The name of the model element property the value of which is stored in this slot. position (optional) i32 Position of the referenced element (if there is only one position-based reference in this slot). positions (optional) list Positions of the referenced elements (if more than one). Used in: ModelElement.","title":"ReferenceSlot"},{"location":"server/api/#repository","text":"Entity that represents a model repository. Name Type Documentation isFrozen (optional) bool True if the repository is frozen, false otherwise. type string The type of repository. uri string The URI to the repository. Used in: Hawk.addRepository, Hawk.listRepositories.","title":"Repository"},{"location":"server/api/#slot","text":"Represents a slot that can store the value(s) of a property of a model element. Inherited by: AttributeSlot, ReferenceSlot, ContainerSlot. Name Type Documentation name string The name of the model element property the value of which is stored in this slot.","title":"Slot"},{"location":"server/api/#slotmetadata","text":"Represents the metadata of a slot in a model element type. Name Type Documentation isMany bool True if this slot holds a collection of values instead of a single value. isOrdered bool True if the values in this slot are ordered. isUnique bool True if the value of this slot must be unique within its containing model. name string The name of the model element property that is stored in this slot. type string The type of the values in this slot. Used in: ModelElementType.","title":"SlotMetadata"},{"location":"server/api/#slotvalue","text":"Union type for a single scalar value or a homogeneous collection of scalar values. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vBooleans list List of true/false values. vByte (inherited) byte 8-bit signed integer value. vBytes binary List of 8-bit signed integers. vDouble (inherited) double 64-bit floating point value. vDoubles list List of 64-bit floating point values. vInteger (inherited) i32 32-bit signed integer value. vIntegers list List of 32-bit signed integers. vLong (inherited) i64 64-bit signed integer value. vLongs list List of 64-bit signed integers. vShort (inherited) i16 16-bit signed integer value. vShorts list List of 16-bit signed integers. vString (inherited) string Sequence of UTF8 characters. vStrings list List of sequences of UTF8 characters. Used in: HawkAttributeUpdateEvent, AttributeSlot.","title":"SlotValue"},{"location":"server/api/#subscription","text":"Details about a subscription to a topic queue. Name Type Documentation host string Host name of the message queue server. port i32 Port in which the message queue server is listening. queueAddress string Address of the topic queue. queueName string Name of the topic queue. sslRequired bool Whether SSL is required or not. Used in: Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"Subscription"},{"location":"server/api/#userprofile","text":"Minimal details about registered users. Name Type Documentation admin bool Whether the user has admin rights (i.e. so that they can create new users, change the status of admin users etc). realName string The real name of the user. Used in: Users.createUser, Users.updateProfile.","title":"UserProfile"},{"location":"server/api/#value","text":"Union type for a single scalar value. Inherited by: QueryResult, SlotValue. Name Type Documentation vBoolean bool Boolean (true/false) value. vByte byte 8-bit signed integer value. vDouble double 64-bit floating point value. vInteger i32 32-bit signed integer value. vLong i64 64-bit signed integer value. vShort i16 16-bit signed integer value. vString string Sequence of UTF8 characters.","title":"Value"},{"location":"server/api/#enumerations","text":"","title":"Enumerations"},{"location":"server/api/#commititemchangetype","text":"Type of change within a commit. Name Documentation ADDED File was added. DELETED File was removed. REPLACED File was removed. UNKNOWN Unknown type of change. UPDATED File was updated.","title":"CommitItemChangeType"},{"location":"server/api/#hawkstate","text":"One of the states that a Hawk instance can be in. Name Documentation RUNNING The instance is running and monitoring the indexed locations. STOPPED The instance is stopped and is not monitoring any indexed locations. UPDATING The instance is updating its contents from the indexed locations.","title":"HawkState"},{"location":"server/api/#ifcexportstatus","text":"Status of a server-side IFC export job. Name Documentation CANCELLED The job has been cancelled. DONE The job is completed. FAILED The job has failed. RUNNING The job is currently running. SCHEDULED The job has been scheduled but has not started yet.","title":"IFCExportStatus"},{"location":"server/api/#subscriptiondurability","text":"Durability of a subscription. Name Documentation DEFAULT Subscription survives client disconnections but not server restarts. DURABLE Subscription survives client disconnections and server restarts. TEMPORARY Subscription removed after disconnecting. ## Exceptions","title":"SubscriptionDurability"},{"location":"server/api/#failedquery","text":"The specified query failed to complete its execution. Name Type Documentation reason string Reason for the query failing to complete its execution. Used in: Hawk.query.","title":"FailedQuery"},{"location":"server/api/#hawkinstancenotfound","text":"No Hawk instance exists with that name. No fields for this entity. Used in: Hawk.removeInstance, Hawk.startInstance, Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"HawkInstanceNotFound"},{"location":"server/api/#hawkinstancenotrunning","text":"The selected Hawk instance is not running. No fields for this entity. Used in: Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"HawkInstanceNotRunning"},{"location":"server/api/#invalidderivedattributespec","text":"The derived attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addDerivedAttribute.","title":"InvalidDerivedAttributeSpec"},{"location":"server/api/#invalidindexedattributespec","text":"The indexed attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addIndexedAttribute.","title":"InvalidIndexedAttributeSpec"},{"location":"server/api/#invalidmetamodel","text":"The provided metamodel is not valid (e.g. unparsable or inconsistent). Name Type Documentation reason string Reason for the metamodel not being valid. Used in: Hawk.registerMetamodels.","title":"InvalidMetamodel"},{"location":"server/api/#invalidpollingconfiguration","text":"The polling configuration is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.configurePolling.","title":"InvalidPollingConfiguration"},{"location":"server/api/#invalidquery","text":"The specified query is not valid. Name Type Documentation reason string Reason for the query not being valid. Used in: Hawk.query.","title":"InvalidQuery"},{"location":"server/api/#unknownquerylanguage","text":"The specified query language is not supported by the operation. No fields for this entity. Used in: Hawk.query.","title":"UnknownQueryLanguage"},{"location":"server/api/#unknownrepositorytype","text":"The specified repository type is not supported by the operation. No fields for this entity. Used in: Hawk.addRepository.","title":"UnknownRepositoryType"},{"location":"server/api/#userexists","text":"The specified username already exists. No fields for this entity. Used in: Users.createUser.","title":"UserExists"},{"location":"server/api/#usernotfound","text":"The specified username does not exist. No fields for this entity. Used in: Users.updateProfile, Users.updatePassword, Users.deleteUser.","title":"UserNotFound"},{"location":"server/api/#vcsauthenticationfailed","text":"The client failed to prove its identity in the VCS. No fields for this entity. Used in: Hawk.addRepository. This file was automatically generated by Ecore2Thrift. https://github.com/bluezio/ecore2thrift","title":"VCSAuthenticationFailed"},{"location":"server/architecture/","text":"If an entire team is querying the same set of models, indexing them from a central location is more efficient than maintaining multiple indexes. In other cases, we may want to query models from outside Eclipse and even from applications written in other languages (e.g. C++ or Python). To support these use cases, Hawk includes a server that exposes its functionality through a set of Thrift APIs. This server product is a headless Eclipse application that can be run from the command line. The general structure is as shown here: The server component is implemented as an Eclipse application, based on the Eclipse Equinox OSGi runtime. Using Eclipse Equinox for the server allows for integrating the Eclipse-based tools with very few changes in their code, while reducing the chances of mutual interference. The OSGi class loading mechanisms ensure that each plugin only \"sees\" the classes that it declares as dependencies, avoiding common clashes such as requiring different versions of the same Java library or overriding a configuration file with an unexpected copy from another library. To mitigate the risk of connectivity problems due to enterprise firewalls, the server uses for most of the API the standard HTTP and HTTPS protocols (by default, on the unprivileged ports 8080 and 8443) and secures them through Apache Shiro . Optionally, the Hawk API can be exposed through raw TCP on port 2080, for increased performance: however, security-conscious environments should leave it disabled as it does not support authentication. The embedded Apache Artemis messaging queue required for remote change notifications in Hawk requires its own port, as it manages its own network connections. By default, this is port 61616. These notifications are made available through two protocols: Artemis Core (a lightweight replacement for the Java Message Service, for Java clients) and STOMP over WebSockets (a cross-language messaging protocol, for web-based clients). The server includes plugins that use the standard OSGi HttpService facilities to register servlets and filters. Each service is implemented as one or more of these servlets. The currently implemented endpoints are these: Path within server Service Thrift protocol /thrift/hawk/binary Hawk Binary /thrift/hawk/compact Hawk Compact /thrift/hawk/json Hawk JSON /thrift/hawk/tuple Hawk Tuple /thrift/users Users JSON All services provide a JSON endpoint, since it is compatible across all languages supported by Thrift and works well with web-based clients. However, since Hawk is performance sensitive (as we might need to encode a large number of model elements in the results of a query), it also provides endpoints with the other Thrift protocols. Binary is the most portable after JSON, and Tuple is the most efficient but is only usable from Java clients. Having all four protocols allows Hawk clients to pick the most efficient protocol that is available for their language. The available operations for the Users and Hawk APIs are listed in Thrift API . For details about the optional access control to these APIs, check Thrift API security .","title":"Architecture"},{"location":"server/cli/","text":"You can talk to a Hawk server from one of the console client products in the latest release . Using the product only requires unpacking the product and running the main executable within it. Alternatively, you could install the \"Hawk CLI Feature\" into your Eclipse instance and use these commands from the \"Host OSGi Console\" in the Console view. Each Thrift API has its own set of commands. Hawk \u00b6 You can use the hawkHelp command to list all the available commands. Connecting to Hawk \u00b6 Name Description hawkConnect \\<url> [username] [password] Connects to a Thrift endpoint (guesses the protocol from the URL) hawkDisconnect Disconnects from the current Thrift endpoint Managing Hawk indexer instances \u00b6 Name Description hawkAddInstance \\<name> \\<backend> [minDelay] [maxDelay|0] Adds an instance with the provided name (if maxDelay = 0, periodic updates are disabled) hawkListBackends Lists the available Hawk backends hawkListInstances Lists the available Hawk instances hawkRemoveInstance \\<name> Removes an instance with the provided name, if it exists hawkSelectInstance \\<name> Selects the instance with the provided name hawkStartInstance \\<name> Starts the instance with the provided name hawkStopInstance \\<name> Stops the instance with the provided name hawkSyncInstance \\<name> [waitForSync:true|false] Requests an immediate sync on the instance with the provided name Managing metamodels \u00b6 Name Description hawkListMetamodels Lists all registered metamodels in this instance hawkRegisterMetamodel \\<files...> Registers one or more metamodels hawkUnregisterMetamodel \\<uri> Unregisters the metamodel with the specified URI Managing version control repositories \u00b6 Name Description hawkAddRepository \\<url> \\<type> [user] [pwd] Adds a repository hawkListFiles \\<url> [filepatterns...] Lists files within a repository hawkListRepositories Lists all registered metamodels in this instance hawkListRepositoryTypes Lists available repository types hawkRemoveRepository \\<url> Removes the repository with the specified URL hawkUpdateRepositoryCredentials \\<url> \\<user> \\<pwd> Changes the user/password used to monitor a repository Querying models \u00b6 Name Description hawkGetModel \\<repo> [filepatterns...] Returns all the model elements of the specified files within the repo hawkGetRoots \\<repo> [filepatterns...] Returns only the root model elements of the specified files within the repo hawkListQueryLanguages Lists all available query languages hawkQuery \\<query> \\<language> [repo] [files] Queries the index hawkResolveProxies \\<ids...> Retrieves model elements by ID Managing derived attributes \u00b6 Name Description hawkAddDerivedAttribute \\<mmURI> \\<mmType> \\<name> \\<type> \\<lang> \\<expr> [many|ordered|unique]* Adds a derived attribute hawkListDerivedAttributes Lists all available derived attributes hawkRemoveDerivedAttribute \\<mmURI> \\<mmType> \\<name> Removes a derived attribute, if it exists Managing indexed attributes \u00b6 Name Description hawkAddIndexedAttribute \\<mmURI> \\<mmType> \\<name> Adds an indexed attribute hawkListIndexedAttributes Lists all available indexed attributes hawkRemoveIndexedAttribute \\<mmURI> \\<mmType> \\<name> Removes an indexed attribute, if it exists Watching over changes in remote models \u00b6 Name Description hawkWatchModelChanges [default|temporary|durable] [client ID] [repo] [files...] Watches an Artemis message queue with detected model changes Users \u00b6 The Users API has its own set of commands, which can be listed through usersHelp : Name Description usersHelp Lists all the available commands for Users usersConnect \\<url> [username] [password] Connects to a Thrift endpoint usersDisconnect Disconnects from the current Thrift endpoint usersAdd \\<username> \\<realname> \\<isAdmin: true|false> [password] Adds the user to the database usersUpdateProfile \\<username> \\<realname> \\<isAdmin: true|false> Changes the personal information of a user usersUpdatePassword \\<username> [password] Changes the password of a user usersRemove \\<username> Removes a user usersCheck \\<username> [password] Validates credentials","title":"Console client"},{"location":"server/cli/#hawk","text":"You can use the hawkHelp command to list all the available commands.","title":"Hawk"},{"location":"server/cli/#connecting-to-hawk","text":"Name Description hawkConnect \\<url> [username] [password] Connects to a Thrift endpoint (guesses the protocol from the URL) hawkDisconnect Disconnects from the current Thrift endpoint","title":"Connecting to Hawk"},{"location":"server/cli/#managing-hawk-indexer-instances","text":"Name Description hawkAddInstance \\<name> \\<backend> [minDelay] [maxDelay|0] Adds an instance with the provided name (if maxDelay = 0, periodic updates are disabled) hawkListBackends Lists the available Hawk backends hawkListInstances Lists the available Hawk instances hawkRemoveInstance \\<name> Removes an instance with the provided name, if it exists hawkSelectInstance \\<name> Selects the instance with the provided name hawkStartInstance \\<name> Starts the instance with the provided name hawkStopInstance \\<name> Stops the instance with the provided name hawkSyncInstance \\<name> [waitForSync:true|false] Requests an immediate sync on the instance with the provided name","title":"Managing Hawk indexer instances"},{"location":"server/cli/#managing-metamodels","text":"Name Description hawkListMetamodels Lists all registered metamodels in this instance hawkRegisterMetamodel \\<files...> Registers one or more metamodels hawkUnregisterMetamodel \\<uri> Unregisters the metamodel with the specified URI","title":"Managing metamodels"},{"location":"server/cli/#managing-version-control-repositories","text":"Name Description hawkAddRepository \\<url> \\<type> [user] [pwd] Adds a repository hawkListFiles \\<url> [filepatterns...] Lists files within a repository hawkListRepositories Lists all registered metamodels in this instance hawkListRepositoryTypes Lists available repository types hawkRemoveRepository \\<url> Removes the repository with the specified URL hawkUpdateRepositoryCredentials \\<url> \\<user> \\<pwd> Changes the user/password used to monitor a repository","title":"Managing version control repositories"},{"location":"server/cli/#querying-models","text":"Name Description hawkGetModel \\<repo> [filepatterns...] Returns all the model elements of the specified files within the repo hawkGetRoots \\<repo> [filepatterns...] Returns only the root model elements of the specified files within the repo hawkListQueryLanguages Lists all available query languages hawkQuery \\<query> \\<language> [repo] [files] Queries the index hawkResolveProxies \\<ids...> Retrieves model elements by ID","title":"Querying models"},{"location":"server/cli/#managing-derived-attributes","text":"Name Description hawkAddDerivedAttribute \\<mmURI> \\<mmType> \\<name> \\<type> \\<lang> \\<expr> [many|ordered|unique]* Adds a derived attribute hawkListDerivedAttributes Lists all available derived attributes hawkRemoveDerivedAttribute \\<mmURI> \\<mmType> \\<name> Removes a derived attribute, if it exists","title":"Managing derived attributes"},{"location":"server/cli/#managing-indexed-attributes","text":"Name Description hawkAddIndexedAttribute \\<mmURI> \\<mmType> \\<name> Adds an indexed attribute hawkListIndexedAttributes Lists all available indexed attributes hawkRemoveIndexedAttribute \\<mmURI> \\<mmType> \\<name> Removes an indexed attribute, if it exists","title":"Managing indexed attributes"},{"location":"server/cli/#watching-over-changes-in-remote-models","text":"Name Description hawkWatchModelChanges [default|temporary|durable] [client ID] [repo] [files...] Watches an Artemis message queue with detected model changes","title":"Watching over changes in remote models"},{"location":"server/cli/#users","text":"The Users API has its own set of commands, which can be listed through usersHelp : Name Description usersHelp Lists all the available commands for Users usersConnect \\<url> [username] [password] Connects to a Thrift endpoint usersDisconnect Disconnects from the current Thrift endpoint usersAdd \\<username> \\<realname> \\<isAdmin: true|false> [password] Adds the user to the database usersUpdateProfile \\<username> \\<realname> \\<isAdmin: true|false> Changes the personal information of a user usersUpdatePassword \\<username> [password] Changes the password of a user usersRemove \\<username> Removes a user usersCheck \\<username> [password] Validates credentials","title":"Users"},{"location":"server/deployment/","text":"Initial setup \u00b6 To run the Hawk server, download the latest hawk-server-*.zip file for your operating system and architecture of choice from the \"Releases\" section on Github , and unpack it. Note that -nogpl- releases do not include GPL-licensed components: if you want them in your server, you will have to build it yourself. Make any relevant changes to the mondo-server.ini file, and then run the run-server.sh script from Linux, or simply the provided mondo-server binary from Mac or Windows. If everything goes well, you should see this message: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. osgi> You may now use the Thrift APIs as normal. If you need to make any tweaks, continue reading! .ini options \u00b6 You will notice that the .ini file has quite a few different options defined, in addition to the JVM options defined with -vmargs . We will analyze them in this section. -console allows us to use the OSGi console to manage Hawk instances. -consoleLog plugs Eclipse logging into the console, for following what is going with the server. -Dartemis.security.enabled=false disables the Shiro security realm for the embedded Artemis server. Production environments should set this to true . -Dhawk.artemis.host=localhost has Artemis listening only on 127.0.0.1. You should change this to the IP address or hostname of the network interface that you want Artemis to listen on. -Dhawk.artemis.listenAll=false prevents Artemis from listening on all addresses. You can set this to true and ignore hawk.artemis.host . -Dhawk.artemis.sslEnabled=false disables HTTPS on Artemis. If you enable SSL, you will need to check the \"Enabling HTTPS\" section further below! -Dhawk.tcp.port=2080 enables the TCP server for only the Hawk API, and not the Users management one. This API is unsecured, so do this at your own risk. For production environments, you should remove this line. -Dhawk.tcp.thriftProtocol=TUPLE changes the Thrift protocol (encoding) that should be used for the TCP endpoint. -Dorg.eclipse.equinox.http.jetty.customizer.class=org.hawk.service.server.gzip.Customizer is needed for the * -Dorg.osgi.service.http.port=8080 sets the HTTP port for the APIs to 8080. -Dorg.osgi.service.http.port.secure=8443 sets the HTTPS port for the APIs to 8443. -Dosgi.noShutdown=true is needed for the server to stay running. -Dsvnkit.library.gnome-keyring.enabled=false is required to work around a bug in the integration of the GNOME keyring in recent Eclipse releases. -eclipse.keyring and -eclipse.password are the paths to the keyring and keyring password files which store the VCS credentials Hawk needs to access password-protected SVN repositories. (For Git repositories, you are assumed to keep your own clone and do any periodic pulling yourself.) -XX:+UseG1GC (part of -vmargs ) improves garbage collection in OrientDB and Neo4j. -XX:+UseStringDeduplication (part of -vmargs as well) noticeably reduces memory use in OrientDB. Concerns for production environments \u00b6 One important detail for production environments is turning on security. This is disabled by default to help with testing and initial evaluations, but it can be enabled by running the server once, shutting it down and then editing the shiro.ini file appropriately (relevant sections include comments on what to do) and switching artemis.security.enabled to true in the mondo-server.ini file. The MONDO server uses an embedded MapDB database, which is managed through the Users [[Thrift API]]. Once security is enabled, all Thrift APIs and all external (not in-VM) Artemis connections become password-protected. If you enable security, you will want to ensure that -Dhawk.tcp.port is not present in the mondo-server.ini file, since the Hawk TCP port does not support security for the sake of raw performance. If you are deploying this across a network, you will need to edit the mondo-server.ini file and customize the hawk.artemis.host line to the host that you want the Artemis server to listen to. This should be the IP address or hostname of the MONDO server in the network, normally. The Thrift API uses this hostname as well in its replies to the watchModelChanges operation in the Hawk API. Additionally, if the server IP is dynamic but has a consistent DNS name (e.g. an Amazon VM + a dynamic DNS provider), we recommend setting hawk.artemis.listenAll to true (so the Artemis server will keep listening on all interfaces, even if the IP address changes) and using the DNS name for hawk.artemis.host instead of a literal IP address. Finally, production environments should enable and enforce SSL as well, since plain HTTP is insecure. The Linux products include a shell script that generates simple self-signed key/trust stores and indicates which Java system properties should be set on the server and the client. Secure storage of VCS credentials \u00b6 The server hosts a copy of the Hawk model indexer, which may need to access remote Git and Subversion repositories. To access password-protected repositories, the server will need to store the proper credentials in a secure way that will not expose them to other users in the same machine. To achieve this goal, the MONDO server uses the Eclipse secure storage facilities to save the password in an encrypted form. Users need to prepare the secure storage by following these two steps: The secure store must be placed in a place no other program will try to access concurrently. This can be done by editing the mondo-server.ini server configuration file and adding this: -eclipse.keyring /path/to/keyringfile That path should be only readable by the user running the server, for added security. An encryption password must be set. For Windows and Mac, the available OS integration should be enough. For Linux environments, two lines have to be added at the beginning of the mondo-server.ini file, specifying the path to a password file with: -eclipse.password /path/to/passwordfile. On Linux, creating a password file from 100 bytes of random data that is only readable by the current user can be done with these commands: $ head -c 100 /dev/random | base64 > /path/to/password $ chmod 400 /path/to/password The server tests on startup that the secure store has been set properly, warning users if encryption is not available and urging them to revise their setup. Setting up SSL certificates for the server \u00b6 SSL is handled through standard Java keystore ( .jks ) files. To produce a keystore with some self-signed certificates, you could use the generate-ssl-certs.sh script included in the Linux distribution, or run these commands from other operating systems (replace CN, OU and so forth with the appropriate values): keytool -genkey -keystore mondo-server-keystore.jks -storepass secureexample -keypass secureexample -dname \"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ\" -keyalg RSA keytool -export -keystore mondo-server-keystore.jks -file mondo-jks.cer -storepass secureexample keytool -import -keystore mondo-client-truststore.jks -file mondo-jks.cer -storepass secureexample -keypass secureexample -noprompt Once you have your .jks, on the client .ini you'll need to set: -Djavax.net.ssl.trustStore=path/to/client-truststore.jks -Djavax.net.ssl.trustStorePassword=secureexample On the server .ini, you'll need to enable SSL and tell Jetty and Artemis about your KeyStore: -Dorg.eclipse.equinox.http.jetty.https.enabled=true -Dhawk.artemis.sslEnabled=true -Dorg.eclipse.equinox.http.jetty.ssl.keystore=path/to/server-keystore.jks -Djavax.net.ssl.keyStore=path/to/server-keystore.jks You'll be prompted for the key store password three times: two by Jetty and once by the Artemis server. If you don't want these prompts, you could use these properties, but using them is UNSAFE , as another user in the same machine could retrieve these passwords from your process manager: -Djavax.net.ssl.keyStorePassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.keypassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.password=secureexample","title":"Deployment"},{"location":"server/deployment/#initial-setup","text":"To run the Hawk server, download the latest hawk-server-*.zip file for your operating system and architecture of choice from the \"Releases\" section on Github , and unpack it. Note that -nogpl- releases do not include GPL-licensed components: if you want them in your server, you will have to build it yourself. Make any relevant changes to the mondo-server.ini file, and then run the run-server.sh script from Linux, or simply the provided mondo-server binary from Mac or Windows. If everything goes well, you should see this message: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. osgi> You may now use the Thrift APIs as normal. If you need to make any tweaks, continue reading!","title":"Initial setup"},{"location":"server/deployment/#ini-options","text":"You will notice that the .ini file has quite a few different options defined, in addition to the JVM options defined with -vmargs . We will analyze them in this section. -console allows us to use the OSGi console to manage Hawk instances. -consoleLog plugs Eclipse logging into the console, for following what is going with the server. -Dartemis.security.enabled=false disables the Shiro security realm for the embedded Artemis server. Production environments should set this to true . -Dhawk.artemis.host=localhost has Artemis listening only on 127.0.0.1. You should change this to the IP address or hostname of the network interface that you want Artemis to listen on. -Dhawk.artemis.listenAll=false prevents Artemis from listening on all addresses. You can set this to true and ignore hawk.artemis.host . -Dhawk.artemis.sslEnabled=false disables HTTPS on Artemis. If you enable SSL, you will need to check the \"Enabling HTTPS\" section further below! -Dhawk.tcp.port=2080 enables the TCP server for only the Hawk API, and not the Users management one. This API is unsecured, so do this at your own risk. For production environments, you should remove this line. -Dhawk.tcp.thriftProtocol=TUPLE changes the Thrift protocol (encoding) that should be used for the TCP endpoint. -Dorg.eclipse.equinox.http.jetty.customizer.class=org.hawk.service.server.gzip.Customizer is needed for the * -Dorg.osgi.service.http.port=8080 sets the HTTP port for the APIs to 8080. -Dorg.osgi.service.http.port.secure=8443 sets the HTTPS port for the APIs to 8443. -Dosgi.noShutdown=true is needed for the server to stay running. -Dsvnkit.library.gnome-keyring.enabled=false is required to work around a bug in the integration of the GNOME keyring in recent Eclipse releases. -eclipse.keyring and -eclipse.password are the paths to the keyring and keyring password files which store the VCS credentials Hawk needs to access password-protected SVN repositories. (For Git repositories, you are assumed to keep your own clone and do any periodic pulling yourself.) -XX:+UseG1GC (part of -vmargs ) improves garbage collection in OrientDB and Neo4j. -XX:+UseStringDeduplication (part of -vmargs as well) noticeably reduces memory use in OrientDB.","title":".ini options"},{"location":"server/deployment/#concerns-for-production-environments","text":"One important detail for production environments is turning on security. This is disabled by default to help with testing and initial evaluations, but it can be enabled by running the server once, shutting it down and then editing the shiro.ini file appropriately (relevant sections include comments on what to do) and switching artemis.security.enabled to true in the mondo-server.ini file. The MONDO server uses an embedded MapDB database, which is managed through the Users [[Thrift API]]. Once security is enabled, all Thrift APIs and all external (not in-VM) Artemis connections become password-protected. If you enable security, you will want to ensure that -Dhawk.tcp.port is not present in the mondo-server.ini file, since the Hawk TCP port does not support security for the sake of raw performance. If you are deploying this across a network, you will need to edit the mondo-server.ini file and customize the hawk.artemis.host line to the host that you want the Artemis server to listen to. This should be the IP address or hostname of the MONDO server in the network, normally. The Thrift API uses this hostname as well in its replies to the watchModelChanges operation in the Hawk API. Additionally, if the server IP is dynamic but has a consistent DNS name (e.g. an Amazon VM + a dynamic DNS provider), we recommend setting hawk.artemis.listenAll to true (so the Artemis server will keep listening on all interfaces, even if the IP address changes) and using the DNS name for hawk.artemis.host instead of a literal IP address. Finally, production environments should enable and enforce SSL as well, since plain HTTP is insecure. The Linux products include a shell script that generates simple self-signed key/trust stores and indicates which Java system properties should be set on the server and the client.","title":"Concerns for production environments"},{"location":"server/deployment/#secure-storage-of-vcs-credentials","text":"The server hosts a copy of the Hawk model indexer, which may need to access remote Git and Subversion repositories. To access password-protected repositories, the server will need to store the proper credentials in a secure way that will not expose them to other users in the same machine. To achieve this goal, the MONDO server uses the Eclipse secure storage facilities to save the password in an encrypted form. Users need to prepare the secure storage by following these two steps: The secure store must be placed in a place no other program will try to access concurrently. This can be done by editing the mondo-server.ini server configuration file and adding this: -eclipse.keyring /path/to/keyringfile That path should be only readable by the user running the server, for added security. An encryption password must be set. For Windows and Mac, the available OS integration should be enough. For Linux environments, two lines have to be added at the beginning of the mondo-server.ini file, specifying the path to a password file with: -eclipse.password /path/to/passwordfile. On Linux, creating a password file from 100 bytes of random data that is only readable by the current user can be done with these commands: $ head -c 100 /dev/random | base64 > /path/to/password $ chmod 400 /path/to/password The server tests on startup that the secure store has been set properly, warning users if encryption is not available and urging them to revise their setup.","title":"Secure storage of VCS credentials"},{"location":"server/deployment/#setting-up-ssl-certificates-for-the-server","text":"SSL is handled through standard Java keystore ( .jks ) files. To produce a keystore with some self-signed certificates, you could use the generate-ssl-certs.sh script included in the Linux distribution, or run these commands from other operating systems (replace CN, OU and so forth with the appropriate values): keytool -genkey -keystore mondo-server-keystore.jks -storepass secureexample -keypass secureexample -dname \"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ\" -keyalg RSA keytool -export -keystore mondo-server-keystore.jks -file mondo-jks.cer -storepass secureexample keytool -import -keystore mondo-client-truststore.jks -file mondo-jks.cer -storepass secureexample -keypass secureexample -noprompt Once you have your .jks, on the client .ini you'll need to set: -Djavax.net.ssl.trustStore=path/to/client-truststore.jks -Djavax.net.ssl.trustStorePassword=secureexample On the server .ini, you'll need to enable SSL and tell Jetty and Artemis about your KeyStore: -Dorg.eclipse.equinox.http.jetty.https.enabled=true -Dhawk.artemis.sslEnabled=true -Dorg.eclipse.equinox.http.jetty.ssl.keystore=path/to/server-keystore.jks -Djavax.net.ssl.keyStore=path/to/server-keystore.jks You'll be prompted for the key store password three times: two by Jetty and once by the Artemis server. If you don't want these prompts, you could use these properties, but using them is UNSAFE , as another user in the same machine could retrieve these passwords from your process manager: -Djavax.net.ssl.keyStorePassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.keypassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.password=secureexample","title":"Setting up SSL certificates for the server"},{"location":"server/eclipse/","text":"Hawk includes multiple optional features to integrate the Thrift APIs with regular Eclipse-based tooling: A custom Hawk instance type that operates over the Thrift API instead of locally. An EMF abstraction that allows for treating remote models as local ones. An editor for the .hawkmodel model access descriptors used by the above EMF resource abstraction. This page documents how these different features can be used. Managing remote Hawk indexers \u00b6 When creating a Hawk instance for the first time (using the dialog shown below), users can specify which factory will be used. The name of the selected factory will be saved into the configuration of the instance, allowing Hawk to recreate the instance in later executions without asking again. Hawk provides a default LocalHawkFactory whose LocalHawk instances operate in the current Java virtual machine. Users can also specify which Hawk components should be enabled. A factory can also be used to \"import\" instances that already exist but Hawk does not know about. For the local case, these would be instances that were previously removed from Eclipse but whose folders were not deleted. The Eclipse import dialog looks like this: The \"Thrift API integration for Hawk GUI\" feature provides a plugin that contributes a new indexer factory, ThriftRemoteHawkFactory, which produces ThriftRemoteHawk instances that use ThriftRemoteModelIndexer indexers. When creating a new instance, the factory will use the createInstance operation to add the instance to the server. When used to \"import\", the remote factory retrieves the list of Hawk instances available on the server through the listInstances operation of the Thrift API. Management actions (such as starting or stopping the instance) and their results are likewise translated between the user interface and the Thrift API. The Hawk user interface provides live updates on the current state of each indexer, with short status messages and an indication of whether the indexer is stopped, running or updating. Management actions and queries are disabled during an update, to prevent data consistency issues. The Hawk indexer in the remote server talks to the client through an Artemis queue: please make sure Artemis has been set up correctly in the server (see the setup guide ). All these aspects are transparent to the user: the only difference is selecting the appropriate \"Instance type\" in the new instance or import dialogs and entering the URL to the Hawk Thrift endpoint. If the remote instance type is chosen, Hawk will only list the Hawk components that are installed in the server, which may differ from those installed in the client. Editor for remote model access descriptors \u00b6 There are many different use cases for retrieving models over the network, each with their own requirements. The EMF model abstraction uses a .hawkmodel model access descriptor to specify the exact configuration we want to use when fetching the model over the network. .hawkmodel files can be opened by any EMF-compatible tool and operate just like a regular model. To simplify the creation and maintenance of these .hawkmodel files, an Eclipse-based editor is provided in the \"Remote Hawk EMF Model UI Feature\". The editor is divided into three tabs: a form-based tab for editing most aspects of the descriptor in a controlled manner, another form-based tab for editing the effective metamodel to limit the contents of the model, and a text-based tab for editing the descriptor directly. Main tab \u00b6 Here is a screenshot of the main tab: The main form-based tab is divided into three sections: The \"Instance\" section provides connection details for the remote Hawk instance: the URL of the Thrift endpoint, the Thrift protocol to use (more details in D5.6) and the name of the Hawk instance within the server. \"Instance name\" can be clicked to open a selection dialog with all the available instances. The \"Username\" and \"Password\" fields only need to be filled in if using the .hawkmodel file outside Eclipse. When using the .hawkmodel inside Eclipse, the remote EMF abstraction will fall back on the credentials stored in the Eclipse secure store if needed. The \"Contents\" section allows for filtering the contents of the Hawk index to be read and changing how they should be loaded: By default, the entire index is retrieved (repository URL is '*', file pattern is '*' and no query is used). The \"Repository URL\", \"File pattern(s)\" and \"Query language\" labels can be clicked to open selection dialogs with the appropriate options. The default loading mode is \"GREEDY\" (send the entire contents of the model in one message), but various lazy loading modes are available. The contents of the index can be split over the different source files or not. While splitting by file is useful for browsing, some EMF-based tools may not be compatible with it. The \"Default namespaces\" field makes it possible to resolve ambiguous type names. For instance, both the IFC2x3 and the IFC4 metamodels have a type called IfcActor . Without this field, the query would need to specify which one of the two metamodels should be used on every reference to IfcActor , which is unwieldy and prone to mistakes. With this field filled, the query will be told to resolve ambiguous type references to those of the IFC2x3 metamodel. The \"Page size for initial load\" field can be set to a value other than 0, indicating that during the initial load of the model, its contents should not be sent in one response message, but rather divided into \"pages\" of a certain size. It was observed that a GREEDY loading mode with an adequate page size can be faster to load than a lazy loading mode, while still keeping server memory and bandwidth requirements under control. The \"Subscription\" section allows users to enable live updates in the opened model through the watchGraphChanges operation and an Apache Artemis queue of a certain durability. In order to allow the server to recognize users that reconnect after a connection loss, a unique client ID should be provided. Effective metamodel tab \u00b6 The effective metamodel editor tab presents a table that lists all the metamodels registered in the selected remote Hawk instance, their types, and their features (called \"slots\" by the Hawk API). It is structured as a tree with three levels, with the metamodels at the root level, the types inside the metamodels, and their slots inside the types. The implicit default is that all metamodels are completely included, but users can manually include or exclude certain metamodels, types or slots within the types. This can be done through drop-down selection lists on the \"State\" column of the table, or through the buttons on the right of the table: \"Include all\" resets the entire table to the default state of implicitly including everything. \"Exclude all\" resets the entire table to excluding all metamodels. \"Exclude\" and \"Include\" only change the state of the currently selected element. \"Reset\" returns the currently selected element to the \"Default\" state. The effective metamodel is saved as part of the .hawkmodel file, and uses both inclusion and exclusion rules to remain as compact as possible (as it will need to be sent over the network). The rules work as follows: A metamodel is included if it is \"Included\", or if it has the \"Default\" state and no metamodels are explicitly \"Included\". A type is included if it is not \"Excluded\" and its metamodel is included. A slot is included if it is not \"Excluded\" and its type is included.","title":"Eclipse client"},{"location":"server/eclipse/#managing-remote-hawk-indexers","text":"When creating a Hawk instance for the first time (using the dialog shown below), users can specify which factory will be used. The name of the selected factory will be saved into the configuration of the instance, allowing Hawk to recreate the instance in later executions without asking again. Hawk provides a default LocalHawkFactory whose LocalHawk instances operate in the current Java virtual machine. Users can also specify which Hawk components should be enabled. A factory can also be used to \"import\" instances that already exist but Hawk does not know about. For the local case, these would be instances that were previously removed from Eclipse but whose folders were not deleted. The Eclipse import dialog looks like this: The \"Thrift API integration for Hawk GUI\" feature provides a plugin that contributes a new indexer factory, ThriftRemoteHawkFactory, which produces ThriftRemoteHawk instances that use ThriftRemoteModelIndexer indexers. When creating a new instance, the factory will use the createInstance operation to add the instance to the server. When used to \"import\", the remote factory retrieves the list of Hawk instances available on the server through the listInstances operation of the Thrift API. Management actions (such as starting or stopping the instance) and their results are likewise translated between the user interface and the Thrift API. The Hawk user interface provides live updates on the current state of each indexer, with short status messages and an indication of whether the indexer is stopped, running or updating. Management actions and queries are disabled during an update, to prevent data consistency issues. The Hawk indexer in the remote server talks to the client through an Artemis queue: please make sure Artemis has been set up correctly in the server (see the setup guide ). All these aspects are transparent to the user: the only difference is selecting the appropriate \"Instance type\" in the new instance or import dialogs and entering the URL to the Hawk Thrift endpoint. If the remote instance type is chosen, Hawk will only list the Hawk components that are installed in the server, which may differ from those installed in the client.","title":"Managing remote Hawk indexers"},{"location":"server/eclipse/#editor-for-remote-model-access-descriptors","text":"There are many different use cases for retrieving models over the network, each with their own requirements. The EMF model abstraction uses a .hawkmodel model access descriptor to specify the exact configuration we want to use when fetching the model over the network. .hawkmodel files can be opened by any EMF-compatible tool and operate just like a regular model. To simplify the creation and maintenance of these .hawkmodel files, an Eclipse-based editor is provided in the \"Remote Hawk EMF Model UI Feature\". The editor is divided into three tabs: a form-based tab for editing most aspects of the descriptor in a controlled manner, another form-based tab for editing the effective metamodel to limit the contents of the model, and a text-based tab for editing the descriptor directly.","title":"Editor for remote model access descriptors"},{"location":"server/eclipse/#main-tab","text":"Here is a screenshot of the main tab: The main form-based tab is divided into three sections: The \"Instance\" section provides connection details for the remote Hawk instance: the URL of the Thrift endpoint, the Thrift protocol to use (more details in D5.6) and the name of the Hawk instance within the server. \"Instance name\" can be clicked to open a selection dialog with all the available instances. The \"Username\" and \"Password\" fields only need to be filled in if using the .hawkmodel file outside Eclipse. When using the .hawkmodel inside Eclipse, the remote EMF abstraction will fall back on the credentials stored in the Eclipse secure store if needed. The \"Contents\" section allows for filtering the contents of the Hawk index to be read and changing how they should be loaded: By default, the entire index is retrieved (repository URL is '*', file pattern is '*' and no query is used). The \"Repository URL\", \"File pattern(s)\" and \"Query language\" labels can be clicked to open selection dialogs with the appropriate options. The default loading mode is \"GREEDY\" (send the entire contents of the model in one message), but various lazy loading modes are available. The contents of the index can be split over the different source files or not. While splitting by file is useful for browsing, some EMF-based tools may not be compatible with it. The \"Default namespaces\" field makes it possible to resolve ambiguous type names. For instance, both the IFC2x3 and the IFC4 metamodels have a type called IfcActor . Without this field, the query would need to specify which one of the two metamodels should be used on every reference to IfcActor , which is unwieldy and prone to mistakes. With this field filled, the query will be told to resolve ambiguous type references to those of the IFC2x3 metamodel. The \"Page size for initial load\" field can be set to a value other than 0, indicating that during the initial load of the model, its contents should not be sent in one response message, but rather divided into \"pages\" of a certain size. It was observed that a GREEDY loading mode with an adequate page size can be faster to load than a lazy loading mode, while still keeping server memory and bandwidth requirements under control. The \"Subscription\" section allows users to enable live updates in the opened model through the watchGraphChanges operation and an Apache Artemis queue of a certain durability. In order to allow the server to recognize users that reconnect after a connection loss, a unique client ID should be provided.","title":"Main tab"},{"location":"server/eclipse/#effective-metamodel-tab","text":"The effective metamodel editor tab presents a table that lists all the metamodels registered in the selected remote Hawk instance, their types, and their features (called \"slots\" by the Hawk API). It is structured as a tree with three levels, with the metamodels at the root level, the types inside the metamodels, and their slots inside the types. The implicit default is that all metamodels are completely included, but users can manually include or exclude certain metamodels, types or slots within the types. This can be done through drop-down selection lists on the \"State\" column of the table, or through the buttons on the right of the table: \"Include all\" resets the entire table to the default state of implicitly including everything. \"Exclude all\" resets the entire table to excluding all metamodels. \"Exclude\" and \"Include\" only change the state of the currently selected element. \"Reset\" returns the currently selected element to the \"Default\" state. The effective metamodel is saved as part of the .hawkmodel file, and uses both inclusion and exclusion rules to remain as compact as possible (as it will need to be sent over the network). The rules work as follows: A metamodel is included if it is \"Included\", or if it has the \"Default\" state and no metamodels are explicitly \"Included\". A type is included if it is not \"Excluded\" and its metamodel is included. A slot is included if it is not \"Excluded\" and its type is included.","title":"Effective metamodel tab"},{"location":"server/file-config/","text":"Hawk server includes an API to add Hawk instances that are used to index and query models. The configuration engine allows the server to create and configure Hawk instances as per user-created configuration files. The server should be ready to receive user queries upon startup without any interaction from user or clients. Upon startup, Hawk server reads and parses configuration files, and then it creates/updates hawk instances as per configuration files. NOTE: the Hawk server no longer writes to configuration files. If an instance configuration changes during operation, this configuration is persisted through the current HawkConfig mechanism. Configuration files will not overwrite any of the changed settings. The only exception is the polling min/max which will revert to config file settings if a server is restarted. Format \u00b6 Configuration files are XML files that define hawk instance name and its configuration. An XML schema can be found at HawkServerConfigurationSchema.xsd . A sample configuration file can be found at Sample Configuration File The XML should include the following elements: Table 1: List of XML elements in configuration file \u00b6 Element Name Parent Element Name multiplicity Value Description \u2018hawk\u2019 xml 1 None Root element \u2018delay\u2019 \u2018hawk\u2019 1 None Polling configuration \u2018plugins\u2019 \u2018hawk\u2019 0-1 None List of plugins (to be/that are) enabled \u2018plugin\u2019 \u2018plugins\u2019 0-* None Plugin name \u2018metamodels\u2019 \u2018hawk\u2019 0-1 None List of metamodels (to be/that are) registered \u2018metamodel\u2019 \u2018metamodels\u2019 0-* None Metamodel parameters \u2018repositories\u2019 \u2018hawk\u2019 0-1 None List of repositories (to be/that are) added \u2018repository\u2019 \u2018repositories\u2019 0-* None Repository parameters \u2018derivedAttributes\u2019 \u2018hawk\u2019 0-1 None List of derived attributes (to be/that are) added \u2018derivedAttribute\u2019 \u2018derivedAttributes\u2019 0-* None Derived attribute parameters \u2018derivation\u2019 \u2018derivedAttribute\u2019 0-1 None Derivation parameters \u2018logic\u2019 \u2018derivation\u2019 0-1 CDATA section An executable expression of the derivation logic in the language specified. \u2018indexedAttributes\u2019 \u2018hawk\u2019 0-1 None List of indexed attributes (to be/that are) added \u2018indexedAttribute\u2019 \u2018indexedAttributes\u2019 0-* None Indexed attribute parameters Table 2: \u2018hawk\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018hawk\u2019 \u2018name\u2019 Required String The unique name of the new Hawk instance \u2018backend\u2019 Required String The name of the backend to be used (e.g.org.hawk.orientdb.OrientDatabase, org.hawk.orientdb.RemoteOrientDatabase) Table 3: \u2018delay\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018delay\u2019 \u2018min\u2019 Required String Minimum delay between periodic synchronization in milliseconds \u2018max\u2019 Required String Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization) Table 4: \u2018plugin\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018plugin\u2019 \u2018name\u2019 Required String e.g. (org.hawk.modelio.exml.listeners.ModelioGraphChangeListener, org.hawk.modelio.exml.metamodel.ModelioMetaModelResourceFactory, org.hawk.modelio.exml.model.ModelioModelResourceFactory) Table 5: \u2018metamodel\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018metamodel\u2019 \u2018location\u2019 Optional String Location of metamodel file to be registered ~~\u2018uri\u2019~~ ~~Optional~~ ~~String~~ ~~Metamodel URI. This value is set automatically by server to list registered metamodels~~ Table 6: \u2018repository\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018repository\u2019 \u2018location\u2019 Required String Location of the repository \u2018type\u2019 Optional String The type of repository available repository types () \u2018user\u2019 Optional String Username for logging into the VCS \u2018pass\u2019 Optional String Password for logging into the VCS \u2018frozen\u2019 Optional String If the repository is frozen (true/false) Table 7: \u2018derivedAttribute\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018derivedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the derived attribute \u2018typeName\u2019 Required String The name of the type to which the derived attribute belongs \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the de- rived attribute belongs \u2018attributeType\u2019 Optional String The (primitive) type of the derived attribute \u2018isOrdered\u2019 Optional String A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true) \u2018isUnique\u2019 Optional String A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true) \u2018isMany\u2019 Optional String The multiplicity of the derived attribute Table 8: \u2018derivation\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018derivation\u2019 \u2018language\u2019 Required String The language used to express the derivation logic. Available labguages in Hawk: org.hawk.epsilon.emc.EOLQueryEngine, org.hawk.orientdb.query.OrientSQLQueryEngine, org.hawk.epsilon.emc.EPLQueryEngine Table 9: \u2018indexedAttribute\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018indexedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the indexed attribute. \u2018typeName\u2019 Required String The name of the type to which the indexed attribute \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the indexed attribute belongs. Location \u00b6 Configuration files are expected to be located in the \u2018configuration\u2019 folder in the server\u2019s home directory. Each Hawk instance should have its own configuration file. There are no rules on how the file should be named. It is a good practice to include hawk instance name in the file name for easy recognition. How to use/enable Hawk instance configuration engine \u00b6 You can follow this video tutorial , or alternatively follow these steps: Download the hawk-server-*.zip file for your operating system and architecture of choice from Hawk Server With Configuration ) Create a configuration file for each instance required to run in the Hawk server. Edit configuration files: Set instance name, backend, delay Add list of plugins to be enabled Add metamodel file to location to be registered Add repositories that are to be indexed Add any required derived attributes Add any required indexed attributes Save the configuration files to the \u2018configuration\u2019 folder in the server\u2019s home directory (see figure 1) Perform any other configuration that are required by Hawk Server and start the server (by following instructions at Deploying-and-running-the-server ) Check if the hawk instances are added and running by typing \u2018hawkListInstances\u2019 in the server\u2019s command terminal: Usage Notes \u00b6 Deleting configuration files from the directory will not delete instances from the server. However, the server will not start those instances. To test Hawk server with Measure Platform, refer to Using HawkQueryMeasure to query Hawk instance running in Hawk Server","title":"File-based configuration"},{"location":"server/file-config/#format","text":"Configuration files are XML files that define hawk instance name and its configuration. An XML schema can be found at HawkServerConfigurationSchema.xsd . A sample configuration file can be found at Sample Configuration File The XML should include the following elements:","title":"Format"},{"location":"server/file-config/#table-1-list-of-xml-elements-in-configuration-file","text":"Element Name Parent Element Name multiplicity Value Description \u2018hawk\u2019 xml 1 None Root element \u2018delay\u2019 \u2018hawk\u2019 1 None Polling configuration \u2018plugins\u2019 \u2018hawk\u2019 0-1 None List of plugins (to be/that are) enabled \u2018plugin\u2019 \u2018plugins\u2019 0-* None Plugin name \u2018metamodels\u2019 \u2018hawk\u2019 0-1 None List of metamodels (to be/that are) registered \u2018metamodel\u2019 \u2018metamodels\u2019 0-* None Metamodel parameters \u2018repositories\u2019 \u2018hawk\u2019 0-1 None List of repositories (to be/that are) added \u2018repository\u2019 \u2018repositories\u2019 0-* None Repository parameters \u2018derivedAttributes\u2019 \u2018hawk\u2019 0-1 None List of derived attributes (to be/that are) added \u2018derivedAttribute\u2019 \u2018derivedAttributes\u2019 0-* None Derived attribute parameters \u2018derivation\u2019 \u2018derivedAttribute\u2019 0-1 None Derivation parameters \u2018logic\u2019 \u2018derivation\u2019 0-1 CDATA section An executable expression of the derivation logic in the language specified. \u2018indexedAttributes\u2019 \u2018hawk\u2019 0-1 None List of indexed attributes (to be/that are) added \u2018indexedAttribute\u2019 \u2018indexedAttributes\u2019 0-* None Indexed attribute parameters","title":"Table 1: List of XML elements in configuration file"},{"location":"server/file-config/#table-2-hawk-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018hawk\u2019 \u2018name\u2019 Required String The unique name of the new Hawk instance \u2018backend\u2019 Required String The name of the backend to be used (e.g.org.hawk.orientdb.OrientDatabase, org.hawk.orientdb.RemoteOrientDatabase)","title":"Table 2:     \u2018hawk\u2019 attributes"},{"location":"server/file-config/#table-3-delay-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018delay\u2019 \u2018min\u2019 Required String Minimum delay between periodic synchronization in milliseconds \u2018max\u2019 Required String Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization)","title":"Table 3:     \u2018delay\u2019 attributes"},{"location":"server/file-config/#table-4-plugin-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018plugin\u2019 \u2018name\u2019 Required String e.g. (org.hawk.modelio.exml.listeners.ModelioGraphChangeListener, org.hawk.modelio.exml.metamodel.ModelioMetaModelResourceFactory, org.hawk.modelio.exml.model.ModelioModelResourceFactory)","title":"Table 4:     \u2018plugin\u2019 attributes"},{"location":"server/file-config/#table-5-metamodel-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018metamodel\u2019 \u2018location\u2019 Optional String Location of metamodel file to be registered ~~\u2018uri\u2019~~ ~~Optional~~ ~~String~~ ~~Metamodel URI. This value is set automatically by server to list registered metamodels~~","title":"Table 5:     \u2018metamodel\u2019 attributes"},{"location":"server/file-config/#table-6-repository-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018repository\u2019 \u2018location\u2019 Required String Location of the repository \u2018type\u2019 Optional String The type of repository available repository types () \u2018user\u2019 Optional String Username for logging into the VCS \u2018pass\u2019 Optional String Password for logging into the VCS \u2018frozen\u2019 Optional String If the repository is frozen (true/false)","title":"Table 6:     \u2018repository\u2019 attributes"},{"location":"server/file-config/#table-7-derivedattribute-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018derivedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the derived attribute \u2018typeName\u2019 Required String The name of the type to which the derived attribute belongs \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the de- rived attribute belongs \u2018attributeType\u2019 Optional String The (primitive) type of the derived attribute \u2018isOrdered\u2019 Optional String A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true) \u2018isUnique\u2019 Optional String A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true) \u2018isMany\u2019 Optional String The multiplicity of the derived attribute","title":"Table 7:    \u2018derivedAttribute\u2019 attributes"},{"location":"server/file-config/#table-8-derivation-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018derivation\u2019 \u2018language\u2019 Required String The language used to express the derivation logic. Available labguages in Hawk: org.hawk.epsilon.emc.EOLQueryEngine, org.hawk.orientdb.query.OrientSQLQueryEngine, org.hawk.epsilon.emc.EPLQueryEngine","title":"Table 8:     \u2018derivation\u2019 attributes"},{"location":"server/file-config/#table-9-indexedattribute-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018indexedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the indexed attribute. \u2018typeName\u2019 Required String The name of the type to which the indexed attribute \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the indexed attribute belongs.","title":"Table 9:     \u2018indexedAttribute\u2019 attributes"},{"location":"server/file-config/#location","text":"Configuration files are expected to be located in the \u2018configuration\u2019 folder in the server\u2019s home directory. Each Hawk instance should have its own configuration file. There are no rules on how the file should be named. It is a good practice to include hawk instance name in the file name for easy recognition.","title":"Location"},{"location":"server/file-config/#how-to-useenable-hawk-instance-configuration-engine","text":"You can follow this video tutorial , or alternatively follow these steps: Download the hawk-server-*.zip file for your operating system and architecture of choice from Hawk Server With Configuration ) Create a configuration file for each instance required to run in the Hawk server. Edit configuration files: Set instance name, backend, delay Add list of plugins to be enabled Add metamodel file to location to be registered Add repositories that are to be indexed Add any required derived attributes Add any required indexed attributes Save the configuration files to the \u2018configuration\u2019 folder in the server\u2019s home directory (see figure 1) Perform any other configuration that are required by Hawk Server and start the server (by following instructions at Deploying-and-running-the-server ) Check if the hawk instances are added and running by typing \u2018hawkListInstances\u2019 in the server\u2019s command terminal:","title":"How to use/enable Hawk instance configuration engine"},{"location":"server/file-config/#usage-notes","text":"Deleting configuration files from the directory will not delete instances from the server. However, the server will not start those instances. To test Hawk server with Measure Platform, refer to Using HawkQueryMeasure to query Hawk instance running in Hawk Server","title":"Usage Notes"},{"location":"server/logging/","text":"Logging in Hawk is done through the Logback library. The specific logback.xml file is part of the org.hawk.service.server.logback plugin fragment. If you need to edit it, it is located in the plugins/org.hawk.service.server.logback_<HAWK RELEASE> folder from the main directory of the server. A typical configuration with Hawk logging at the DEBUG level, with time-based rolling and all messages going to the hawk.log file would look as follows: <configuration> <appender name= \"STDOUT\" class= \"ch.qos.logback.core.ConsoleAppender\" > <layout class= \"ch.qos.logback.classic.PatternLayout\" > <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <appender name= \"FILE\" class= \"ch.qos.logback.core.rolling.RollingFileAppender\" > <file> hawk.log </file> <encoder class= \"ch.qos.logback.classic.encoder.PatternLayoutEncoder\" > <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <rollingPolicy class= \"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\" > <!-- rollover daily --> <fileNamePattern> mylog-%d{yyyy-MM-dd}.%i.txt </fileNamePattern> <maxHistory> 60 </maxHistory> </rollingPolicy> </appender> <logger name= \"org.eclipse.jetty\" level= \"warn\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <logger name= \"ch.qos.logback\" level= \"error\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <logger name= \"org.apache.shiro\" level= \"error\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <!-- Change to \"error\" if Hawk produces too many messages for you --> <logger name= \"org.hawk\" level= \"debug\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> <appender-ref ref= \"FILE\" /> </logger> <root level= \"debug\" > <appender-ref ref= \"STDOUT\" /> </root> </configuration>","title":"Logging"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Eclipse Hawk \u00b6 Eclipse Hawk is a model indexing solution that can take models written with various technologies and turn them into graphs, for easier and faster querying. Hawk is licensed under the Eclipse Public License 2.0 , with the GNU GPL 3.0 as secondary license. Any questions? Check the other sections on the left for how to get started and use Hawk. If you cannot find an answer there, feel free to ask at the official forum in Eclipse.org . Interim downloads (1.2.0) \u00b6 Interim versions of the core components of Hawk 1.2.0 and the OrientDB / Greycat backends can be installed from this Eclipse update site: https://download.eclipse.org/hawk/1.2.0/updates/ There are Apache Thrift client libraries targeting Java, JavaScript and C++ for talking with a Hawk server. The Java library is available under plugins-server , in the api project. The other libraries are available from these links: C++ JavaScript Prebuilt command-line client and server products for Linux, MacOS and Windows are available from the 1.2.0 downloads folder . Source code \u00b6 To access the source code, clone the Git repository for Hawk with your preferred client from: git://git.eclipse.org/gitroot/hawk/hawk.git Committers will use a different URL: ssh://user_id@git.eclipse.org:29418/hawk/hawk You can also read the code through your browser from the Git-web interface (simpler), or from the Gitiles interface (which allows for archive downloads).","title":"Home"},{"location":"#eclipse-hawk","text":"Eclipse Hawk is a model indexing solution that can take models written with various technologies and turn them into graphs, for easier and faster querying. Hawk is licensed under the Eclipse Public License 2.0 , with the GNU GPL 3.0 as secondary license. Any questions? Check the other sections on the left for how to get started and use Hawk. If you cannot find an answer there, feel free to ask at the official forum in Eclipse.org .","title":"Eclipse Hawk"},{"location":"#interim-downloads-120","text":"Interim versions of the core components of Hawk 1.2.0 and the OrientDB / Greycat backends can be installed from this Eclipse update site: https://download.eclipse.org/hawk/1.2.0/updates/ There are Apache Thrift client libraries targeting Java, JavaScript and C++ for talking with a Hawk server. The Java library is available under plugins-server , in the api project. The other libraries are available from these links: C++ JavaScript Prebuilt command-line client and server products for Linux, MacOS and Windows are available from the 1.2.0 downloads folder .","title":"Interim downloads (1.2.0)"},{"location":"#source-code","text":"To access the source code, clone the Git repository for Hawk with your preferred client from: git://git.eclipse.org/gitroot/hawk/hawk.git Committers will use a different URL: ssh://user_id@git.eclipse.org:29418/hawk/hawk You can also read the code through your browser from the Git-web interface (simpler), or from the Gitiles interface (which allows for archive downloads).","title":"Source code"},{"location":"additional-resources/","text":"Screencasts \u00b6 We have several screencasts that show how to use Hawk and work on its code: Running of basic operations Use of advanced features Download and configuration of Hawk onto a fresh Eclipse Luna (Modeling Tools) distribution How to use Hawk to add Modelio metamodel(s) Use Hawk Server to auto-configure & start Hawk Instances Papers \u00b6 Hawk: towards a scalable model indexing architecture A Framework to Benchmark NoSQL Data Stores for Large-Scale Model Persistence Towards Scalable Querying of Large-Scale Models Evaluation of Contemporary Graph Databases for Efficient Persistence of Large-Scale Models Towards Incremental Updates in Large-Scale Model Indexes Towards Scalable Model Indexing (PhD Thesis) Stress-testing remote model querying APIs for relational and graph-based stores Integration of a graph-based model indexer in commercial modelling tools Integration of Hawk for Model Metrics into the MEASURE Platform Hawk solutions to the TTC 2018 Social Media Case Scaling-up domain-specific modelling languages through modularity services Book chapter: Monitoring model analytics over large repositories with Hawk and MEASURE Slides \u00b6 Hawk: indexado de modelos en bases de datos NoSQL - 90 minute slides in Spanish about the MONDO project and Hawk MODELS18 tutorial on NeoEMF and Hawk Related tools \u00b6 The HawkQuery SMM MEASURE library allows using Hawk servers as metric providers for the MEASURE platform.","title":"Additional resources"},{"location":"additional-resources/#screencasts","text":"We have several screencasts that show how to use Hawk and work on its code: Running of basic operations Use of advanced features Download and configuration of Hawk onto a fresh Eclipse Luna (Modeling Tools) distribution How to use Hawk to add Modelio metamodel(s) Use Hawk Server to auto-configure & start Hawk Instances","title":"Screencasts"},{"location":"additional-resources/#papers","text":"Hawk: towards a scalable model indexing architecture A Framework to Benchmark NoSQL Data Stores for Large-Scale Model Persistence Towards Scalable Querying of Large-Scale Models Evaluation of Contemporary Graph Databases for Efficient Persistence of Large-Scale Models Towards Incremental Updates in Large-Scale Model Indexes Towards Scalable Model Indexing (PhD Thesis) Stress-testing remote model querying APIs for relational and graph-based stores Integration of a graph-based model indexer in commercial modelling tools Integration of Hawk for Model Metrics into the MEASURE Platform Hawk solutions to the TTC 2018 Social Media Case Scaling-up domain-specific modelling languages through modularity services Book chapter: Monitoring model analytics over large repositories with Hawk and MEASURE","title":"Papers"},{"location":"additional-resources/#slides","text":"Hawk: indexado de modelos en bases de datos NoSQL - 90 minute slides in Spanish about the MONDO project and Hawk MODELS18 tutorial on NeoEMF and Hawk","title":"Slides"},{"location":"additional-resources/#related-tools","text":"The HawkQuery SMM MEASURE library allows using Hawk servers as metric providers for the MEASURE platform.","title":"Related tools"},{"location":"advanced-use/advanced-props/","text":"When querying through EOL, we can access several extra properties on any model element: eContainer : returns the model element that contains this one, or null if it does not have a container. eContents : collection with all the model elements contained within this one. hawkFile : string with the repository paths of the files that this model element belongs to, separated by \";\". hawkFiles : collection with the repository paths of all the files that this model element belongs to. hawkIn : collection with all the model elements accessible through incoming references. hawkInEdges : collection with all the incoming references (see their attributes below). hawkOut : collection with all the model elements accessible through outgoing references. hawkOutEdges : collection with all the outgoing references (see their attributes below). hawkRepo : string with the URLs of the repositories that this model element belongs to, separated by \";\". hawkRepos : collection with all the repositories that this model element belongs to. hawkURIFragment : URI fragment of the model element within its file. There is also the isContainedWithin(repo, path) method for checking if an element is directly or indirectly contained within a certain file. References are wrapped into entities of their own, with the following attributes: edge : raw edge, without wrapping. type / name : name of the reference. source / startNode : source of the reference. target / endNode : target of the reference.","title":"Advanced properties"},{"location":"advanced-use/graph-as-emf/","text":"In addition to regular querying, it is possible to use a Hawk graph as a model itself. To do so, use the \"File > New > Other > Hawk > Local Hawk Model Descriptor\" wizard and select the Hawk instance you want to access as a model. Once the wizard is finished, open the .localhawkmodel file to browse through it as an EMF model. You will need to ensure that the EPackages of the indexed models are part of your EMF package registry: normally Hawk should ensure this happens. For a Hawk index containing the GraBaTs 2009 set0.xmi file, it will look like this: The actual editor is a customized version of the Epsilon Exeed editor, which is based on the standard EMF reflective tree-based editor. The contents of the graph are navigated lazily, so we can open huge models very quickly and navigate through them. The editor also provides additional \"Custom\" actions when we right click on a top-level node (usually labelled with URLs). Currently, it supports an efficient Fetch by EClass method, that allows fetching all the instances of a type immediately, without having to load the rest of the model. Future versions of Hawk may expose additional operations through this menu. Finally, the EMF resource can be used normally from any EMF-based tools (e.g. transformation engines). However, to make the most out of the resources it will be necessary to extend the tools to have them integrate the efficient graph-based operations that are not part of the EMF Resource interface.","title":"Graph as EMF model"},{"location":"advanced-use/meta-queries/","text":"Hawk extends the regular EOL facilities to be able to query the metamodels registered within the instance: Model.types lists all the types registered in Hawk ( EClass instances for EMF). Model.metamodels lists all the metamodels registered in Hawk ( EPackage instances for EMF). Model.files lists all the files indexed by Hawk (may be limited through the context). Model.getTypeOf(obj) retrieves the type of the object obj . Model.getFileOf(obj) retrieves the first file containing the object obj . Model.getFilesOf(obj) retrieves all the files containing the object obj . For a metamodel mm , these attributes are available: mm.uri is the namespace URI of the metamodel. mm.metamodelType is the type of metamodel that was registered. mm.dependencies lists the metamodels this metamodel depends on (usually at least the Ecore metamodel for EMF-based metamodels). mm.types lists the types defined in this metamodel. mm.resource retrieves the original string representation for this metamodel (the original .ecore file for EMF). For a type t , these attributes are available: t.metamodel retrieves the metamodel that defines the type. t.all retrieves all instances of that type efficiently (includes subtypes). t.name retrieves the name of the type. t.attributes lists the attributes of the type, as slots (see below). t.references lists the references of the type, as slots. t.features lists the attributes and references of the type. For a slot sl , these attributes are available: sl.name : name of the slot. sl.type : type of the value of the slot. sl.isMany : true if this is a multi-valued slot. sl.isOrdered : true if the values should follow some order. sl.isAttribute : true if this is an attribute slot. sl.isReference : true if this is a reference slot. sl.isUnique : true if the value for this slot should be unique within its model. For a file f , these attributes are available: f.path : returns the path of the file within the repository (e.g. /input.xmi ). f.repository : returns the URL of the repository (e.g. file:///home/myuser/models ). f.roots : returns the root model elements in the file. f.contents : returns all the model elements in the file.","title":"Meta-level queries"},{"location":"advanced-use/oomph/","text":"Oomph has a feature that synchronizes preferences across workspaces (see bug 490549 ). This can be a problem if you expect different workspaces to have different Hawk indexes. If so, you should reconfigure Oomph so it does not record the /instance/org.hawk.osgiserver preferences node at the \"User\" and \"Installation\" levels. To do this, go to \"Window > Preferences\", select \"Oomph > Setup Tasks > Preference Recorder\", check \"Record into\", select \"User\" and make sure /instance/org.hawk.osgiserver/config either does not appear or is unchecked . It should be the same for \"Installation\" and \"Workspace\".","title":"Oomph and Hawk"},{"location":"advanced-use/temporal-queries/","text":"The latest versions of Hawk have the capability to index every version of all the models in the locations being monitored. To enable this capability, your Hawk index must meet certain conditions: You must be using a time-aware backend (currently, Greycat). You must be using the time-aware updater (TimeAwareModelUpdater) and not the standard one. You must be using the time-aware indexer factory and not the standard one (TimeAwareHawkFactory). You must query the index with a time-aware query language: org.hawk.timeaware.queries.TimeAwareEOLQueryEngine org.hawk.timeaware.queries.TimelineEOLQueryEngine If you meet these constraints, you can index a SVN repository with models and Hawk will turn the full history of every model into an integrated temporal graph database, or index a workspace/local folder and have Hawk remember the history of every model from then onwards. You will be able to query this temporal graph through an extension of Hawk's EOL dialect. This functionality was first discussed in our MRT 2018 paper, \"Reflecting on the past and the present with temporal graph-based models\". Data model \u00b6 The usual type -> model element graph in Hawk is extended to give both types and model elements their own histories. The histories are defined as follows: Types are immortal: they are created at the first endpoint in the graph and last to the \"end of time\" of the graph. There is a new version whenever an instance of the type is created or destroyed. Model elements are created at a certain timepoint, and either survive or are destroyed at another timepoint. Model elements are assumed to have a persistent identity: either its natural/artificial identifier, or its location within the model. New versions are produced when an attribute or a reference changes. Timepoints are provided by the Hawk connectors, and they tend to be commit timestamps or file timestamps. In SVN, these are commit timestamps to millisecond precision. Basic history traversal primitives \u00b6 The actual primitives are quite simple. In the time-aware dialect of Hawk, types and model elements expose the following additional attributes and operations: x.versions : returns the sequence of all versions for x , from newest to oldest x.getVersionsBetween(from, to) : versions within a range of timepoints x.getVersionsFrom(from) : versions from a timepoint (included) x.getVersionsUpTo(from) : versions up to a timepoint (included) x.earliest , x.latest : earliest / latest version x.next , x.prev / x.previous : next / previous version x.time : version timepoint Temporal assertions \u00b6 It is possible to evaluate assertions over the history of a type or model element: x.always(version | predicate over version) : true if and only if (\"iff\") the predicate is true for every version of x . x.never(version | predicate over version) : true iff the predicate is false for every version of x . x.eventually(version | predicate over version) : true iff the predicate is true for some version of x . x.eventuallyAtLeast(version | predicate over version, count) : true iff the predicate is true in at least count versions of x . x.eventuallyAtMost(version | predicate over version, count) : true iff the predicate is true in at least one version and at most count versions of x . Scoping views (predicate-based) \u00b6 The versions in scope for the above assertions and primitives can be limited with: x.since(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards. This esentially imposes a left-closed version interval. x.after(version | predicate over version) will return the type/model element in the timepoint immediately after the oldest timepoint for which the predicate holds, or null if it does not exist. It is essentially a variant of x.since that implements a left-open interval. x.until(version | predicate over version) will return the the same type/model element, but it will only report versions up to and including the first one for which the predicate holds, or null if such a version does not exist. This implements a right-closed version interval. x.before(version | predicate over version) will return the same type/model element, but it will only report versions before (excluding) the first one for which the predicate holds, or null if such a version does not exist. This implements a right-open interval. x.when(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards that match the predicate. This is a left-closed, filtered interval. Scoping views (context-based) \u00b6 You can also limit the available versions from an existing type / model element: x.sinceThen : version of x that will only report the versions from x onwards (included). x.afterThen : next version of x that will only report the versions after x (excluded). null if a next version does not exist. x.untilThen : version of x that will only report the versions up to x (included). x.beforeThen : previous version of x that will only report the versions before x (excluded). null if a previous version does not exist. You can undo the scoping with .unscoped . This will give you the same model element or type, but with all the versions available once more. Scoping views (based on derived attributes) \u00b6 Some of the events we may be interested in may be very rare. In long histories, it may be very expensive to find such rare events by iterating over all the versions of a model element. In these cases, it is possible to define a derived Boolean attribute (e.g. HasManyChildren for a Tree , with definiton return self.children.size > 100; ) on a type, and then use these additional operations: x.whenAnnotated('AttributeName') : returns a view of the model element x that exposes all the versions when the derived attribute named AttributeName defined on the type of x was true . The view will be at the earliest timepoint when this happened. x.sinceAnnotated('AttributeName') : equivalent to since , but using the derived attribute AttributeName . x.afterAnnotated('AttributeName') : equivalent to after . See above. x.untilAnnotated('AttributeName') : equivalent to until . See above. x.beforeAnnotated('AttributeName') : equivalent to before . See above. IMPORTANT : until #83 is resolved, you will need to define these derived attributes before you index any model versions. Global operations on the model \u00b6 The Model global reference is extended with new operations: Model.allInstancesNow returns all instances of the model at the timepoint equal to current system time. Model.allInstancesAt(timepoint) returns all instances of the model at the specified timepoint, measured in the integer amount of milliseconds elapsed since the epoch. Some examples \u00b6 A simple query to find the number of instances of X in the latest version of the model would be: return X.latest.all.size; If we want to do find the second last time that instances of X were created, we could write something like: return X.latest.prev.time; If we want to find an X that at some point had y greater than 0 and still survives to the latest revision, we could write something like: return X.latest.all.select(x|x.versions.exists(vx|vx.y > 0)); More advanced queries can be found in the Git repository for the MRT 2018 experiment tool . Timeline queries \u00b6 If you want to obtain the results of a certain query for all versions of a model, you can use the TimelineEOLQueryEngine instead. This operates by repeating the same query while changing the global timepoint of the graph, so you can write your query as a normal one and see how it evolves over time. For instance, if using return Model.allInstances.size; , you would see how the number of instances evolved over the various versions of the graph. NOTE: due to current implementation restrictions, this will only process versions where type nodes changed (i.e. objects were created or deleted). We plan to lift this restriction in the near future. Current limitations \u00b6 Subtree contexts, file-first/derived allOf and traversal scoping are not yet implemented for this query engine. File/repository patterns do work. Derived features will only work if added before any VCSes are added, and the impact of adding multiple VCS with their own histories has not been tested yet. Please make sure to report any issues!","title":"Temporal queries"},{"location":"advanced-use/temporal-queries/#data-model","text":"The usual type -> model element graph in Hawk is extended to give both types and model elements their own histories. The histories are defined as follows: Types are immortal: they are created at the first endpoint in the graph and last to the \"end of time\" of the graph. There is a new version whenever an instance of the type is created or destroyed. Model elements are created at a certain timepoint, and either survive or are destroyed at another timepoint. Model elements are assumed to have a persistent identity: either its natural/artificial identifier, or its location within the model. New versions are produced when an attribute or a reference changes. Timepoints are provided by the Hawk connectors, and they tend to be commit timestamps or file timestamps. In SVN, these are commit timestamps to millisecond precision.","title":"Data model"},{"location":"advanced-use/temporal-queries/#basic-history-traversal-primitives","text":"The actual primitives are quite simple. In the time-aware dialect of Hawk, types and model elements expose the following additional attributes and operations: x.versions : returns the sequence of all versions for x , from newest to oldest x.getVersionsBetween(from, to) : versions within a range of timepoints x.getVersionsFrom(from) : versions from a timepoint (included) x.getVersionsUpTo(from) : versions up to a timepoint (included) x.earliest , x.latest : earliest / latest version x.next , x.prev / x.previous : next / previous version x.time : version timepoint","title":"Basic history traversal primitives"},{"location":"advanced-use/temporal-queries/#temporal-assertions","text":"It is possible to evaluate assertions over the history of a type or model element: x.always(version | predicate over version) : true if and only if (\"iff\") the predicate is true for every version of x . x.never(version | predicate over version) : true iff the predicate is false for every version of x . x.eventually(version | predicate over version) : true iff the predicate is true for some version of x . x.eventuallyAtLeast(version | predicate over version, count) : true iff the predicate is true in at least count versions of x . x.eventuallyAtMost(version | predicate over version, count) : true iff the predicate is true in at least one version and at most count versions of x .","title":"Temporal assertions"},{"location":"advanced-use/temporal-queries/#scoping-views-predicate-based","text":"The versions in scope for the above assertions and primitives can be limited with: x.since(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards. This esentially imposes a left-closed version interval. x.after(version | predicate over version) will return the type/model element in the timepoint immediately after the oldest timepoint for which the predicate holds, or null if it does not exist. It is essentially a variant of x.since that implements a left-open interval. x.until(version | predicate over version) will return the the same type/model element, but it will only report versions up to and including the first one for which the predicate holds, or null if such a version does not exist. This implements a right-closed version interval. x.before(version | predicate over version) will return the same type/model element, but it will only report versions before (excluding) the first one for which the predicate holds, or null if such a version does not exist. This implements a right-open interval. x.when(version | predicate over version) will return the type/model element in the oldest timepoint since that of x for which the predicate holds, or null if it does not exist. The returned type/model element will only report versions from its timepoint onwards that match the predicate. This is a left-closed, filtered interval.","title":"Scoping views (predicate-based)"},{"location":"advanced-use/temporal-queries/#scoping-views-context-based","text":"You can also limit the available versions from an existing type / model element: x.sinceThen : version of x that will only report the versions from x onwards (included). x.afterThen : next version of x that will only report the versions after x (excluded). null if a next version does not exist. x.untilThen : version of x that will only report the versions up to x (included). x.beforeThen : previous version of x that will only report the versions before x (excluded). null if a previous version does not exist. You can undo the scoping with .unscoped . This will give you the same model element or type, but with all the versions available once more.","title":"Scoping views (context-based)"},{"location":"advanced-use/temporal-queries/#scoping-views-based-on-derived-attributes","text":"Some of the events we may be interested in may be very rare. In long histories, it may be very expensive to find such rare events by iterating over all the versions of a model element. In these cases, it is possible to define a derived Boolean attribute (e.g. HasManyChildren for a Tree , with definiton return self.children.size > 100; ) on a type, and then use these additional operations: x.whenAnnotated('AttributeName') : returns a view of the model element x that exposes all the versions when the derived attribute named AttributeName defined on the type of x was true . The view will be at the earliest timepoint when this happened. x.sinceAnnotated('AttributeName') : equivalent to since , but using the derived attribute AttributeName . x.afterAnnotated('AttributeName') : equivalent to after . See above. x.untilAnnotated('AttributeName') : equivalent to until . See above. x.beforeAnnotated('AttributeName') : equivalent to before . See above. IMPORTANT : until #83 is resolved, you will need to define these derived attributes before you index any model versions.","title":"Scoping views (based on derived attributes)"},{"location":"advanced-use/temporal-queries/#global-operations-on-the-model","text":"The Model global reference is extended with new operations: Model.allInstancesNow returns all instances of the model at the timepoint equal to current system time. Model.allInstancesAt(timepoint) returns all instances of the model at the specified timepoint, measured in the integer amount of milliseconds elapsed since the epoch.","title":"Global operations on the model"},{"location":"advanced-use/temporal-queries/#some-examples","text":"A simple query to find the number of instances of X in the latest version of the model would be: return X.latest.all.size; If we want to do find the second last time that instances of X were created, we could write something like: return X.latest.prev.time; If we want to find an X that at some point had y greater than 0 and still survives to the latest revision, we could write something like: return X.latest.all.select(x|x.versions.exists(vx|vx.y > 0)); More advanced queries can be found in the Git repository for the MRT 2018 experiment tool .","title":"Some examples"},{"location":"advanced-use/temporal-queries/#timeline-queries","text":"If you want to obtain the results of a certain query for all versions of a model, you can use the TimelineEOLQueryEngine instead. This operates by repeating the same query while changing the global timepoint of the graph, so you can write your query as a normal one and see how it evolves over time. For instance, if using return Model.allInstances.size; , you would see how the number of instances evolved over the various versions of the graph. NOTE: due to current implementation restrictions, this will only process versions where type nodes changed (i.e. objects were created or deleted). We plan to lift this restriction in the near future.","title":"Timeline queries"},{"location":"advanced-use/temporal-queries/#current-limitations","text":"Subtree contexts, file-first/derived allOf and traversal scoping are not yet implemented for this query engine. File/repository patterns do work. Derived features will only work if added before any VCSes are added, and the impact of adding multiple VCS with their own histories has not been tested yet. Please make sure to report any issues!","title":"Current limitations"},{"location":"basic-use/core-concepts/","text":"Core concepts and general usage \u00b6 Components \u00b6 Hawk is an extensible system. Currently, it contains the following kinds of components: Type Role Current implementations Change listeners React to changes in the graph produced by the updaters Tracing, Validation Graph backends Integrate database technologies Neo4j , OrientDB , Greycat Model drivers Integrate modelling technologies Ecore , BPMN , Modelio , IFC2x3/IFC4 in this repo , and UML2 Query languages Translate high-level queries into efficient graph queries Epsilon Object Language , Epsilon Pattern Language , OrientDB SQL Updaters Update the graph based on the detected changes in the models and metamodels Built-in VCS managers Integrate file-based model repositories Local folders, SVN repos, Eclipse workspaces, HTTP files General usage \u00b6 Using Hawk generally involves these steps: Create a new Hawk index, based on a specific backend (e.g. Neo4j or OrientDB). Add the required metamodels to the index. Add the model repositories to be monitored. Wait for the initial batch insert (may take some time in large repositories). Add the desired indexed and derived attributes. Perform fast and efficient queries on the graph, using one of the supported query languages (see table above). In the following sections, we will show how to perform these steps. Managing indexes with the Hawk view \u00b6 To manage and use Hawk indexes, first open the \"Hawk\" Eclipse view, using \"Window > Show View > Other... > Hawk > Hawk\". It should look like this: Hawk indexes are queried and managed from this view. From left to right, the buttons are: Query: opens the query dialog. Run: starts a Hawk index if it was stopped. Stop: stops a Hawk index if it was running. Sync: request the Hawk index to check the indexed repositories immediately. Delete: removes an index from the Hawk view, without deleting the actual database (it can be usually recovered later using the \"Import\" button). To remove a local index completely, select it and press Shift+Delete . New: creates a new index (more info below). Import: imports a Hawk index from a factory. Hawk itself only provides a \"local\" factory that looks at the subdirectories of the current Eclipse workspace. Configure: opens the index configuration dialog, which allows for managing the registered metamodels, the repositories to be indexed, the attributes to be derived and the attributes to be indexed. Creating a new index \u00b6 To create a new index, open the Hawk view and use the \"New\" button to open this dialog: The dialog requires these fields: Name: a descriptive name for the index. Only used as an identifier. Instance type: Hawk only supports local instances, but mondo-integration can add support for remote instances. Local storage folder: folder that will store the actual database. If the folder exists, Hawk will reuse that database instead of creating a new one. Remote location: only used for the remote instances in mondo-integrtion . Enabled plugins: list of plugins that are currently enabled in Hawk. Back-end: database backend to be used (currently either Neo4j or OrientDB). Min/max delay: minimum and maximum delays in milliseconds between synchronisations. Hawk will start at the minimum value: every time it does not find any changes, it will double the delay up to the maximum value. If it finds a change, it will reset back to the minimum value. Periodic synchronisation can be completely disabled by changing the minimum and maximum delays to 0: in this mode, Hawk will only synchronise on startup, when a repository is added or when the user requests it manually. Once these fields have been filled in, Hawk will create and set up the index in a short period. Managing metamodels \u00b6 After creating the index, the next step is to register the metamodels of the models that are going to be indexed. To do this, select the index in the Hawk view and either double click it or click on the \"Configure\" button. The configure dialog will open: The configure dialog has several tabs. For managing metamodels, we need to go to the \"Metamodels\" tab. It will list the URIs of the currently registered metamodels. If a metamodel we need is not listed there, we can use the \"Add\" button to provide Hawk with the appropriate file to be indexed (e.g. the .ecore file for EMF-based models, or the metamodel-descriptor.xml for Modelio-based models). We can also \"Remove\" metamodels: this will remove all dependent models and metamodels as well. To try out Hawk, we recommend adding the JDTAST.ecore metamodel, which was used in the GraBaTs 2009 case study from AtlanMod . For Modelio metamodels, use the metamodel-descriptor.xml for Modelio 3.6 projects (for older projects, use the older descriptors included as metamodel_*.xml files in the Modelio 3.6 sources ). Keep in mind that metamodels may have dependencies to others. You will need to either add all metamodels at once, or add each metamodel after those it depends upon. If adding all the metamodels at once, Hawk will rearrange their addition taking into account their mutual dependencies. Note: the EMF driver can parse regular Ecore metamodels with the .ecore extension. Note: regarding the Modelio metamodel-descriptor.xml files, you can find those as part of the Modelio source code . Managing repositories \u00b6 Having added the metamodels of the models to be indexed, the following step is to add the repositories to be indexed. To do so, go to the \"Indexed Locations\" tab of the Hawk configure dialog, and use the \"Add\" button. Hawk will present the following dialog: The fields to be used are as follows: Type: type of repository to be indexed. Location: URL or path to the repository. For local folders, it is recommended to use the \"Browse...\" button to produce the adequate file:// URL. For SVN, it is best to copy and paste the full URL. Finally, the location is irrelevant for workspace repositories: selecting any directory from \"Browse...\" will work just the same. User + pass: for private SVN repositories, these will be the username and password to be used to connect to the repository. Hawk will store the password on the Eclipse secure storage. To try out Hawk, after adding the JDTAST.ecore metamodel from the previous section, we recommend adding a folder with a copy of the set0.xmi file. It has around 70k model elements. To watch over the indexing process, look at the \"Error Log\" view or run Eclipse with the -console option. The supported file extensions are as follows: Driver Extensions EMF .xmi , .model , any extensions in the EMF extension factory map that use XMIResourceFactoryImpl , any extensions mentioned through the org.hawk.emf.model.extraExtensions Java system property (e.g. -Dorg.hawk.emf.model.extraExtensions=.railway,.rail ). UML2 .uml . .profile.uml files can be indexed normally and also registered as metamodels. BPMN .bpmn , .bpmn2 . Modelio .exml , .ramc . Parses mmversion.dat internally for metadata. IFC .ifc , .ifcxml , .ifc.txt , .ifcxml.txt , .ifc.zip , .ifczip . Managing indexed attributes \u00b6 Simply indexing the models into the graph will already speed up considerably some common queries, such as finding all the instances of a type: in Hawk, this is done through direct edge traversal instead of going through the entire model. However, queries that filter model elements through the value of their attributes will need additional indexing to be set up. For instance, if we wanted to speed up return Class.all.selectOne(c|c.name='MyClass'); (which returns the class named \"MyClass\"), we would need to index the name attribute in the Class type. To do so, we need to go to the Hawk configure dialog, select the \"Indexed Attributes\" tab and press the \"Add\" button. This dialog will open: Its fields are as follows: Metamodel URI: the URI of the metamodel that has the type we want. Type Name: the name of the type (here \"Class\"). Attribute Name: the name of the attribute to be indexed (here \"name\"). Please allow some time after the dialog is closed to have Hawk generate the index. Currently, Hawk can index attributes with strings, booleans and numbers. Indexing will speed up not only = , but also > and all the other relational operators. Managing derived attributes \u00b6 Sometimes we will need to filter model elements through a piece of information that is not directly stored among its attributes, but is rather computed from them. To speed up the process, Hawk can keep precompute these derived attributes in the graph, keeping them up to date and indexing them. For instance, if we wanted to quickly filter UML classes by their number of operations, we would go to the Hawk configure dialog, select the \"Derived Attributes\" tab and click on the \"Add\" button. This dialog would appear: The fields are as follows: Metamodel URI: the URI of the metamodel with the type to be extended. Type Name: the name of the type we are going to extend. Attribute Name: the name of the new derived attribute (should be unique). Attribute Type: the type of the new derived attribute. isMany: true if this is a collection of values, false otherwise. isOrdered: true if this is an ordered collection of values, false otherwise. isUnique: true if the value should provide a unique identifier, false otherwise. Derivation Language: query language that the derivation logic will be written on. EOL is the default choice. Derivation Logic: expression in the chosen language that will compute the value. Hawk provides the self variable to access the model element being extended. For this particular example, we'd set the fields like this: Metamodel URI: the URI of the UML metamodel. Type Name: Class. Attribute Name: ownedOperationCount. Attribute Type: Integer. isMany, isOrdered, isUnique: false. Derivation Language: EOLQueryEngine. Derivation Logic: return self.ownedOperation.size; . After pressing OK, Hawk will spend some time computing the derived attribute and indexing the value. After that, queries such as return Class.all.select(c|c.ownedOperationCount > 20); will complete much faster. Querying the graph \u00b6 To query the indexed models, use the \"Query\" button of the Hawk view. This dialog will open: The actual query can be entered through the \"Query\" field manually, or loaded from a file using the \"Query File\" button. The query should be written in the language selected in \"Query Engine\". The scope of the query can be limited using the \"Context Repositories\" and \"Context Files\" fields: for instance, using set1.xmi on the \"Context Files\" field would limit it to the contents of the set1.xmi file. Running the query with \"Run Query\" button will place the results on the \"Result\" field.","title":"Core concepts"},{"location":"basic-use/core-concepts/#core-concepts-and-general-usage","text":"","title":"Core concepts and general usage"},{"location":"basic-use/core-concepts/#components","text":"Hawk is an extensible system. Currently, it contains the following kinds of components: Type Role Current implementations Change listeners React to changes in the graph produced by the updaters Tracing, Validation Graph backends Integrate database technologies Neo4j , OrientDB , Greycat Model drivers Integrate modelling technologies Ecore , BPMN , Modelio , IFC2x3/IFC4 in this repo , and UML2 Query languages Translate high-level queries into efficient graph queries Epsilon Object Language , Epsilon Pattern Language , OrientDB SQL Updaters Update the graph based on the detected changes in the models and metamodels Built-in VCS managers Integrate file-based model repositories Local folders, SVN repos, Eclipse workspaces, HTTP files","title":"Components"},{"location":"basic-use/core-concepts/#general-usage","text":"Using Hawk generally involves these steps: Create a new Hawk index, based on a specific backend (e.g. Neo4j or OrientDB). Add the required metamodels to the index. Add the model repositories to be monitored. Wait for the initial batch insert (may take some time in large repositories). Add the desired indexed and derived attributes. Perform fast and efficient queries on the graph, using one of the supported query languages (see table above). In the following sections, we will show how to perform these steps.","title":"General usage"},{"location":"basic-use/core-concepts/#managing-indexes-with-the-hawk-view","text":"To manage and use Hawk indexes, first open the \"Hawk\" Eclipse view, using \"Window > Show View > Other... > Hawk > Hawk\". It should look like this: Hawk indexes are queried and managed from this view. From left to right, the buttons are: Query: opens the query dialog. Run: starts a Hawk index if it was stopped. Stop: stops a Hawk index if it was running. Sync: request the Hawk index to check the indexed repositories immediately. Delete: removes an index from the Hawk view, without deleting the actual database (it can be usually recovered later using the \"Import\" button). To remove a local index completely, select it and press Shift+Delete . New: creates a new index (more info below). Import: imports a Hawk index from a factory. Hawk itself only provides a \"local\" factory that looks at the subdirectories of the current Eclipse workspace. Configure: opens the index configuration dialog, which allows for managing the registered metamodels, the repositories to be indexed, the attributes to be derived and the attributes to be indexed.","title":"Managing indexes with the Hawk view"},{"location":"basic-use/core-concepts/#creating-a-new-index","text":"To create a new index, open the Hawk view and use the \"New\" button to open this dialog: The dialog requires these fields: Name: a descriptive name for the index. Only used as an identifier. Instance type: Hawk only supports local instances, but mondo-integration can add support for remote instances. Local storage folder: folder that will store the actual database. If the folder exists, Hawk will reuse that database instead of creating a new one. Remote location: only used for the remote instances in mondo-integrtion . Enabled plugins: list of plugins that are currently enabled in Hawk. Back-end: database backend to be used (currently either Neo4j or OrientDB). Min/max delay: minimum and maximum delays in milliseconds between synchronisations. Hawk will start at the minimum value: every time it does not find any changes, it will double the delay up to the maximum value. If it finds a change, it will reset back to the minimum value. Periodic synchronisation can be completely disabled by changing the minimum and maximum delays to 0: in this mode, Hawk will only synchronise on startup, when a repository is added or when the user requests it manually. Once these fields have been filled in, Hawk will create and set up the index in a short period.","title":"Creating a new index"},{"location":"basic-use/core-concepts/#managing-metamodels","text":"After creating the index, the next step is to register the metamodels of the models that are going to be indexed. To do this, select the index in the Hawk view and either double click it or click on the \"Configure\" button. The configure dialog will open: The configure dialog has several tabs. For managing metamodels, we need to go to the \"Metamodels\" tab. It will list the URIs of the currently registered metamodels. If a metamodel we need is not listed there, we can use the \"Add\" button to provide Hawk with the appropriate file to be indexed (e.g. the .ecore file for EMF-based models, or the metamodel-descriptor.xml for Modelio-based models). We can also \"Remove\" metamodels: this will remove all dependent models and metamodels as well. To try out Hawk, we recommend adding the JDTAST.ecore metamodel, which was used in the GraBaTs 2009 case study from AtlanMod . For Modelio metamodels, use the metamodel-descriptor.xml for Modelio 3.6 projects (for older projects, use the older descriptors included as metamodel_*.xml files in the Modelio 3.6 sources ). Keep in mind that metamodels may have dependencies to others. You will need to either add all metamodels at once, or add each metamodel after those it depends upon. If adding all the metamodels at once, Hawk will rearrange their addition taking into account their mutual dependencies. Note: the EMF driver can parse regular Ecore metamodels with the .ecore extension. Note: regarding the Modelio metamodel-descriptor.xml files, you can find those as part of the Modelio source code .","title":"Managing metamodels"},{"location":"basic-use/core-concepts/#managing-repositories","text":"Having added the metamodels of the models to be indexed, the following step is to add the repositories to be indexed. To do so, go to the \"Indexed Locations\" tab of the Hawk configure dialog, and use the \"Add\" button. Hawk will present the following dialog: The fields to be used are as follows: Type: type of repository to be indexed. Location: URL or path to the repository. For local folders, it is recommended to use the \"Browse...\" button to produce the adequate file:// URL. For SVN, it is best to copy and paste the full URL. Finally, the location is irrelevant for workspace repositories: selecting any directory from \"Browse...\" will work just the same. User + pass: for private SVN repositories, these will be the username and password to be used to connect to the repository. Hawk will store the password on the Eclipse secure storage. To try out Hawk, after adding the JDTAST.ecore metamodel from the previous section, we recommend adding a folder with a copy of the set0.xmi file. It has around 70k model elements. To watch over the indexing process, look at the \"Error Log\" view or run Eclipse with the -console option. The supported file extensions are as follows: Driver Extensions EMF .xmi , .model , any extensions in the EMF extension factory map that use XMIResourceFactoryImpl , any extensions mentioned through the org.hawk.emf.model.extraExtensions Java system property (e.g. -Dorg.hawk.emf.model.extraExtensions=.railway,.rail ). UML2 .uml . .profile.uml files can be indexed normally and also registered as metamodels. BPMN .bpmn , .bpmn2 . Modelio .exml , .ramc . Parses mmversion.dat internally for metadata. IFC .ifc , .ifcxml , .ifc.txt , .ifcxml.txt , .ifc.zip , .ifczip .","title":"Managing repositories"},{"location":"basic-use/core-concepts/#managing-indexed-attributes","text":"Simply indexing the models into the graph will already speed up considerably some common queries, such as finding all the instances of a type: in Hawk, this is done through direct edge traversal instead of going through the entire model. However, queries that filter model elements through the value of their attributes will need additional indexing to be set up. For instance, if we wanted to speed up return Class.all.selectOne(c|c.name='MyClass'); (which returns the class named \"MyClass\"), we would need to index the name attribute in the Class type. To do so, we need to go to the Hawk configure dialog, select the \"Indexed Attributes\" tab and press the \"Add\" button. This dialog will open: Its fields are as follows: Metamodel URI: the URI of the metamodel that has the type we want. Type Name: the name of the type (here \"Class\"). Attribute Name: the name of the attribute to be indexed (here \"name\"). Please allow some time after the dialog is closed to have Hawk generate the index. Currently, Hawk can index attributes with strings, booleans and numbers. Indexing will speed up not only = , but also > and all the other relational operators.","title":"Managing indexed attributes"},{"location":"basic-use/core-concepts/#managing-derived-attributes","text":"Sometimes we will need to filter model elements through a piece of information that is not directly stored among its attributes, but is rather computed from them. To speed up the process, Hawk can keep precompute these derived attributes in the graph, keeping them up to date and indexing them. For instance, if we wanted to quickly filter UML classes by their number of operations, we would go to the Hawk configure dialog, select the \"Derived Attributes\" tab and click on the \"Add\" button. This dialog would appear: The fields are as follows: Metamodel URI: the URI of the metamodel with the type to be extended. Type Name: the name of the type we are going to extend. Attribute Name: the name of the new derived attribute (should be unique). Attribute Type: the type of the new derived attribute. isMany: true if this is a collection of values, false otherwise. isOrdered: true if this is an ordered collection of values, false otherwise. isUnique: true if the value should provide a unique identifier, false otherwise. Derivation Language: query language that the derivation logic will be written on. EOL is the default choice. Derivation Logic: expression in the chosen language that will compute the value. Hawk provides the self variable to access the model element being extended. For this particular example, we'd set the fields like this: Metamodel URI: the URI of the UML metamodel. Type Name: Class. Attribute Name: ownedOperationCount. Attribute Type: Integer. isMany, isOrdered, isUnique: false. Derivation Language: EOLQueryEngine. Derivation Logic: return self.ownedOperation.size; . After pressing OK, Hawk will spend some time computing the derived attribute and indexing the value. After that, queries such as return Class.all.select(c|c.ownedOperationCount > 20); will complete much faster.","title":"Managing derived attributes"},{"location":"basic-use/core-concepts/#querying-the-graph","text":"To query the indexed models, use the \"Query\" button of the Hawk view. This dialog will open: The actual query can be entered through the \"Query\" field manually, or loaded from a file using the \"Query File\" button. The query should be written in the language selected in \"Query Engine\". The scope of the query can be limited using the \"Context Repositories\" and \"Context Files\" fields: for instance, using set1.xmi on the \"Context Files\" field would limit it to the contents of the set1.xmi file. Running the query with \"Run Query\" button will place the results on the \"Result\" field.","title":"Querying the graph"},{"location":"basic-use/examples-modelio/","text":"Example queries on Modelio models \u00b6 This article shows several example queries on Modelio projects. The Modelio model driver does not use the XMI export in Modelio: instead, it parses .exml files directly (which might be contained in .ramc files) and understands metamodels described in Modelio metamodel_descriptor.xml files. (To obtain one, download the source code for your Modelio version and search within it. Here is a copy of the one used for Modelio 3.6.) All the queries are written in the Epsilon Object Language , and assume that the toy Zoo Modelio project has been indexed. The queries are based on those in [[the XMI-based UML examples page|Example queries on XMI based UML models]]. The underlying UML model looks like this: To avoid ambiguity in type names, the default namespaces list in the query dialog should include modelio://uml::statik . All instances of a type \u00b6 Returns the number of instances of \"Class\" in the index: return Class . all . size ; Metamodel URI for the \"Class\" type \u00b6 Returns the URI of the metamodel that contains the \"Class\" type ( modelio://uml::statik ): return Model . types . selectOne ( t | t . name = 'Class' ). metamodel . uri ; Reference slots in a type \u00b6 Returns the reference slots in the type \"Class\": return Model . types . select ( t | t . name = 'Class' ). references ; Reference traversal \u00b6 Returns the superclass of \"Zebra\" by navigating the \"Parent\" and \"SuperType\" associations present in the Modelio metamodel: return Class . all . selectOne ( c | c . Name = 'Zebra' ) . Parent . SuperType . Name ; Reverse reference traversal \u00b6 Returns the subclasses of \"Animal\", using the revRefNav_ to navigate references in reverse: return Class . all . selectOne ( c | c . Name = 'Animal' ) . revRefNav_SuperType . revRefNav_Parent . Name ; Range queries with indexed or derived integer attributes \u00b6 This example requires adding a derived attribute first: Metamodel URI: modelio://uml::statik Type Name: Class Attribute Name: ownedOperationCount Attribute Type: Integer isMany, isOrdered, isUnique: false Derivation Language: EOLQueryEngine Derivation Logic: return self.OwnedOperation.size; After it has been added, this query will return the classes that have one or more operations: return Class . all . select ( c | c . ownedOperationCount > 0 ). Name ; Advanced example: loops, variables and custom operations \u00b6 This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own: var counts = Sequence {}; var i = 0 ; var n = count ( 0 ); while ( n > 0 ) { counts . add ( Sequence { \">\" + i , n }); i = i + 1 ; n = count ( i ); } return counts ; operation count ( n ) { return Class . all . select ( c | c . ownedOperationCount > n ). size ; }","title":"Examples (Modelio)"},{"location":"basic-use/examples-modelio/#example-queries-on-modelio-models","text":"This article shows several example queries on Modelio projects. The Modelio model driver does not use the XMI export in Modelio: instead, it parses .exml files directly (which might be contained in .ramc files) and understands metamodels described in Modelio metamodel_descriptor.xml files. (To obtain one, download the source code for your Modelio version and search within it. Here is a copy of the one used for Modelio 3.6.) All the queries are written in the Epsilon Object Language , and assume that the toy Zoo Modelio project has been indexed. The queries are based on those in [[the XMI-based UML examples page|Example queries on XMI based UML models]]. The underlying UML model looks like this: To avoid ambiguity in type names, the default namespaces list in the query dialog should include modelio://uml::statik .","title":"Example queries on Modelio models"},{"location":"basic-use/examples-modelio/#all-instances-of-a-type","text":"Returns the number of instances of \"Class\" in the index: return Class . all . size ;","title":"All instances of a type"},{"location":"basic-use/examples-modelio/#metamodel-uri-for-the-class-type","text":"Returns the URI of the metamodel that contains the \"Class\" type ( modelio://uml::statik ): return Model . types . selectOne ( t | t . name = 'Class' ). metamodel . uri ;","title":"Metamodel URI for the \"Class\" type"},{"location":"basic-use/examples-modelio/#reference-slots-in-a-type","text":"Returns the reference slots in the type \"Class\": return Model . types . select ( t | t . name = 'Class' ). references ;","title":"Reference slots in a type"},{"location":"basic-use/examples-modelio/#reference-traversal","text":"Returns the superclass of \"Zebra\" by navigating the \"Parent\" and \"SuperType\" associations present in the Modelio metamodel: return Class . all . selectOne ( c | c . Name = 'Zebra' ) . Parent . SuperType . Name ;","title":"Reference traversal"},{"location":"basic-use/examples-modelio/#reverse-reference-traversal","text":"Returns the subclasses of \"Animal\", using the revRefNav_ to navigate references in reverse: return Class . all . selectOne ( c | c . Name = 'Animal' ) . revRefNav_SuperType . revRefNav_Parent . Name ;","title":"Reverse reference traversal"},{"location":"basic-use/examples-modelio/#range-queries-with-indexed-or-derived-integer-attributes","text":"This example requires adding a derived attribute first: Metamodel URI: modelio://uml::statik Type Name: Class Attribute Name: ownedOperationCount Attribute Type: Integer isMany, isOrdered, isUnique: false Derivation Language: EOLQueryEngine Derivation Logic: return self.OwnedOperation.size; After it has been added, this query will return the classes that have one or more operations: return Class . all . select ( c | c . ownedOperationCount > 0 ). Name ;","title":"Range queries with indexed or derived integer attributes"},{"location":"basic-use/examples-modelio/#advanced-example-loops-variables-and-custom-operations","text":"This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own: var counts = Sequence {}; var i = 0 ; var n = count ( 0 ); while ( n > 0 ) { counts . add ( Sequence { \">\" + i , n }); i = i + 1 ; n = count ( i ); } return counts ; operation count ( n ) { return Class . all . select ( c | c . ownedOperationCount > n ). size ; }","title":"Advanced example: loops, variables and custom operations"},{"location":"basic-use/examples-xmi/","text":"Example queries on XMI models \u00b6 These are some sample queries that can be done on any set of indexed XMI-based UML models, assuming that Class::name has been added as an indexed attribute and Class::ownedOperationCount has been defined as a derived attribute (as showed in [[Basic concepts and usage]]). All the queries are written in the Epsilon Object Language . In order to index XMI-based UML models, you only need to enable the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when you create a new Hawk instance, and ensure your files have the .uml extension. If you are using any predefined UML data types, you may also want to add a PredefinedUMLLibraries location inside \"Indexed Locations\": that will integrate those predefined objects into the Hawk graph, allowing you to reference them on queries. The rest of this article will run on this toy XMI-based UML file , which was exported from this Modelio 3.2.1 project : To avoid ambiguity in type names, the default namespaces list in the query dialog should include the UML metamodel URI ( http://www.eclipse.org/uml2/5.0.0/UML for the above UML.ecore file). All instances of a type \u00b6 return Class.all.size; Returns the total number of classes within the specified scope. If you leave \"Context Files\" empty, it'll count all the classes in all the projects. If you put \"*OSS.modelio.zip\" in \"Context Files\", it'll count only the classes within the OSS project. This is faster than going through the model because we can go to the Class node and then simply count all the incoming edges with label \"ofType\". Reference slots in a type \u00b6 return Model.types.select(t|t.name='Class').references; Gives you all the reference slots in the UML \"Class\" type. This is an example of the queries that can be performed at the \"meta\" level: more details are available in [[Meta level queries in Hawk]]. The query dialog with the result would look like this: Reference traversal \u00b6 return Class.all .select(c|c.qualifiedName='zoo::Zebra') .superClass.flatten.name; Gives you the names of all the superclasses of class Zebra within model zoo . Reverse reference traversal \u00b6 return Class.all .select(c|c.qualifiedName='zoo::Animal') .revRefNav_superClass.flatten.name; Gives the names of all the sub classes of Animal (follows \"superClass\" in reverse). The UML metamodel doesn't have \"subclass\" links, but we can use Hawk's automatic support for reverse traversal of references. In general, if x.e is a reference, we can follow it in reverse with x.revRefNav_e . We can also access containers using x.eContainer . Range queries with indexed or derived integer attributes \u00b6 return Class.all.select(c|c.ownedOperationCount > 0).name; Finds the names of the classes with at least one operation of their own. Advanced example: loops, variables and custom operations \u00b6 var counts = Sequence {}; var i = 0; var n = count(0); while (n > 0) { counts.add(Sequence {\">\" + i, n}); i = i + 1; n = count(i); } return counts; operation count(n) { return Class.all.select(c|c.ownedOperationCount > n).size; } This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own.","title":"Examples (XMI)"},{"location":"basic-use/examples-xmi/#example-queries-on-xmi-models","text":"These are some sample queries that can be done on any set of indexed XMI-based UML models, assuming that Class::name has been added as an indexed attribute and Class::ownedOperationCount has been defined as a derived attribute (as showed in [[Basic concepts and usage]]). All the queries are written in the Epsilon Object Language . In order to index XMI-based UML models, you only need to enable the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when you create a new Hawk instance, and ensure your files have the .uml extension. If you are using any predefined UML data types, you may also want to add a PredefinedUMLLibraries location inside \"Indexed Locations\": that will integrate those predefined objects into the Hawk graph, allowing you to reference them on queries. The rest of this article will run on this toy XMI-based UML file , which was exported from this Modelio 3.2.1 project : To avoid ambiguity in type names, the default namespaces list in the query dialog should include the UML metamodel URI ( http://www.eclipse.org/uml2/5.0.0/UML for the above UML.ecore file).","title":"Example queries on XMI models"},{"location":"basic-use/examples-xmi/#all-instances-of-a-type","text":"return Class.all.size; Returns the total number of classes within the specified scope. If you leave \"Context Files\" empty, it'll count all the classes in all the projects. If you put \"*OSS.modelio.zip\" in \"Context Files\", it'll count only the classes within the OSS project. This is faster than going through the model because we can go to the Class node and then simply count all the incoming edges with label \"ofType\".","title":"All instances of a type"},{"location":"basic-use/examples-xmi/#reference-slots-in-a-type","text":"return Model.types.select(t|t.name='Class').references; Gives you all the reference slots in the UML \"Class\" type. This is an example of the queries that can be performed at the \"meta\" level: more details are available in [[Meta level queries in Hawk]]. The query dialog with the result would look like this:","title":"Reference slots in a type"},{"location":"basic-use/examples-xmi/#reference-traversal","text":"return Class.all .select(c|c.qualifiedName='zoo::Zebra') .superClass.flatten.name; Gives you the names of all the superclasses of class Zebra within model zoo .","title":"Reference traversal"},{"location":"basic-use/examples-xmi/#reverse-reference-traversal","text":"return Class.all .select(c|c.qualifiedName='zoo::Animal') .revRefNav_superClass.flatten.name; Gives the names of all the sub classes of Animal (follows \"superClass\" in reverse). The UML metamodel doesn't have \"subclass\" links, but we can use Hawk's automatic support for reverse traversal of references. In general, if x.e is a reference, we can follow it in reverse with x.revRefNav_e . We can also access containers using x.eContainer .","title":"Reverse reference traversal"},{"location":"basic-use/examples-xmi/#range-queries-with-indexed-or-derived-integer-attributes","text":"return Class.all.select(c|c.ownedOperationCount > 0).name; Finds the names of the classes with at least one operation of their own.","title":"Range queries with indexed or derived integer attributes"},{"location":"basic-use/examples-xmi/#advanced-example-loops-variables-and-custom-operations","text":"var counts = Sequence {}; var i = 0; var n = count(0); while (n > 0) { counts.add(Sequence {\">\" + i, n}); i = i + 1; n = count(i); } return counts; operation count(n) { return Class.all.select(c|c.ownedOperationCount > n).size; } This query produces a sequence of >x, y pairs which indicate that y classes have more than x operations of their own.","title":"Advanced example: loops, variables and custom operations"},{"location":"basic-use/installation/","text":"Hawk can be used as a regular Java library (to be embedded within another Java program) or as a set of plugins for the Eclipse IDE. To install most of Hawk's Eclipse plugins, point your installation to this update site, which is kept up to date automatically using Travis: https://download.eclipse.org/hawk/1.2.0/updates/ This is a composite update site, which contains not only Hawk, but also its dependencies. Simply check all the categories that start with \"Hawk\". Some of the components in Hawk cannot be redistributed in binary form due to incompatible licenses. You will need to build the update site for these restricted components yourself: please consult the developer resources in the wiki to do that.","title":"Installation"},{"location":"basic-use/papyrus/","text":"Hawk includes specific support for MDT2 UML models and UML profiles developed using Papyrus UML. This can be used by enabling the UMLMetaModelResourceFactory and UMLModelResourceFactory plugins when creating a Hawk instance. The implementation mostly reuses MDT UML2 and Papyrus UML as-is, in order to maximize compatibility. There are some minor caveats, which are documented in this page. Supported file extensions \u00b6 Hawk indexes plain UML2 models with the .uml extension, and Papyrus profiles with the .profile.uml extension. It does not index .di nor .notation files at the moment, as these do not provide semantic information. .xmi files are not indexed by the Hawk UML components, to avoid conflicts with the plain EMF support (matching the file to the proper model resource is done strictly by file extension). You are recommended to rename your UML2 XMI files to .uml for now. Predefined UML packages \u00b6 UML2 provides an implementation of the UML standard libraries, with packages containing some common datatypes (e.g. String or Integer). If your models use any of these libraries, we heavily recommend that you add a PredefinedUMLLibraries component in your \"Indexed Locations\" section. Otherwise, any references from your models to the libraries will be left unresolved, and you will not be able to use those predefined entities in your queries. This is because Hawk operates normally on files, and the predefined UML libraries are generally bundled within the UML2 plugins. The PredefinedUMLLibraries exposes those bundled resources to Hawk in a way that is transparent to the querying language. Multi-version Papyrus UML profile support \u00b6 Beyond registering all the metamodels required to index plain UML models, the UML metamodel resource factory in Hawk can register .profile.uml files as metamodels. This allows us to index UML models with custom profiles in Hawk. Since UML profiles can be versioned, Hawk will register version X.Y.Z of profile with URI http://your/profile with http://your/profile/X.Y.Z as the URI. When querying with Hawk, you will have to specify http://your/profile/X.Y.Z in your default namespaces, in order to resolve the ambiguity that may exist between multiple versions of the same metamodel. If a new version of the UML profile is created, you will need to register the .profile.uml file again with Hawk before it can index models that use that version of the profile. Hawk treats entities of different versions of the same profile as entirely different types. In terms of implementation details, Hawk takes advantage of the fact that .profile.uml files contain a collection of Ecore EPackages . Hawk simply adds the /X.Y.Z version suffix to their namespace URI, and otherwise leaves them untouched. Example: using Hawk to index all UML models in an Eclipse workspace \u00b6 We will show how Hawk can be used to index all the UML models in an Eclipse workspace, including those that have custom profiles applied to them. To illustrate our approach, we will use these toy models created with Papyrus. We assume that you have installed Hawk into your Eclipse instance, following the steps in [[this wiki page|Installation]]. Models \u00b6 The model is a very simple UML class diagram: It only has two classes, one of which has the <<Special>> stereotype with a priority property equal to 23. This value is not shown in the diagram, but it can be checked from the \"Profile\" page of the \"Properties\" view when the class is selected. The profile including the <<Special>> stereotype is also very simple: The diagram imports the Class UML metaclass, and then extends it with the <<Special>> stereotype. Creating the Hawk index \u00b6 Before we can run any queries, we need to create a Hawk index. If we have installed Hawk correctly, we will be able to open the \"Hawk\" view and see something like this: Right now, we have no indexes in Hawk. We need to press the \"Add\" button, which is highlighted in red above. We should see a dialog similar to this: Important points: We can pick any name we want, as long as it is unique. Instance type should be a LocalHawkFactory if we intend to index our workspace. The Local storage folder will contain some of the configuration of that Hawk instance, and the database. Remote location is irrelevant when using the LocalHawkFactory . If we are only interested in indexing the UML models in the workspace, it is a good idea to Disable all the plugins and then check only the UML metamodel and model resource factories. You can choose to use Neo4j (if you [[build it on your own|Running from source]]), OrientDB, or any other backend we may support in the future. Min/Max Delay indicate how often will Hawk poll all the indexed locations. If you are only indexing the current workspace, you can leave both at 0 to disable polling: regardless of this setting, Hawk will react automatically whenever something in the workspace changes. Once the index has been created, you should see an entry for it in the \"Hawk\" view: Adding metamodels and models \u00b6 From the screenshot above, we know that the index is RUNNING (available for queries) and not UPDATING nor STOPPED , so we can start configuring it as we need. First, we should double click on it to open the configuration dialog: We should go to the \"Metamodels\" tab and click on \"Add...\", then select the specialThings.profile/model.profile.uml file. Hawk will register our custom profile as a metamodel, and we will be ready to index models using all the versions of this profile so far. Should we define any newer versions, we will have to add the file again to Hawk. The dialog will now list the new metamodel: Now we are ready to add the locations where the models to be indexed are stored. We go to the \"Indexed Locations\" tab and click on \"Add\". First, we will add the predefined UML libraries with some commonly used instances (e.g. UML data types): We need to pick the right \"Type\", and then enter / in the \"Location\" field. The location is ignored for this repository, but due to current limitations in the UI we have to enter something in the field. Next, we have to tell Hawk to index all the models in the workspace. We will \"Add\" another location, and this time fill the dialog like this: Again, the / \"Location\" is irrelevant but required by the UI. Hawk will spend some time UPDATING , and once it is RUNNING again we will be ready to run some queries on it. Querying Hawk \u00b6 We can finally query Hawk now. To do so, we need to select our index on the \"Hawk\" view and click on the \"Query\" button, which looks like a magnifying glass: We will see a dialog like this one, with all fields empty: Enter the query return Class.all.name; and click on the \"Run Query\" button. This query lists the names of all the classes indexed so far by Hawk. You will notice that we obtain these results: [E, T, MyClass, Special, V, NotSoSpecial, Stereotype1, K, E] The E/T/V/K/E classes came from the predefined UML libraries. If you want only the results from your workspace, you must tell Hawk through the \"Context Repositories\" field, by entering platform:/resource . This is the base URI used by Hawk to identify all the files in your workspace. Click on \"Run Query\" again, and you should obtain the results shown in the screenshot: [MyClass, Stereotype1, Special, NotSoSpecial] Note how the query also returns the classes in the profile. Should you want to avoid this, you can either use the \"Context Files\" field ( *model.uml will do this) to further restrict the scope of the query. Finding UML objects by stereotype \u00b6 If you would like to find all applications of stereotype X , you can simply use X.all and then use base_Metaclass to find the object that was annotated with that stereotype. For instance, this query will find the name of all the classes that had the <<Special>> stereotype applied to them: return Special.all.base_Class.name; You will get: [MyClass] You can also access stereotype properties: return Special.all.collect(s| Sequence { s.priority, s.base_Class.name } ).asSequence; This will produce: [[23, MyClass]] Finding stereotype applications from the UML object \u00b6 If you want to go the other way around, you can use reverse reference navigation on those base_X references to find the stereotypes that have been applied to a UML object: return Class.all .selectOne(s|s.name = 'MyClass') .revRefNav_base_Class .collect(st|Model.getTypeOf(st)) .name; This would produce: [Special]","title":"Papyrus UML support"},{"location":"basic-use/papyrus/#supported-file-extensions","text":"Hawk indexes plain UML2 models with the .uml extension, and Papyrus profiles with the .profile.uml extension. It does not index .di nor .notation files at the moment, as these do not provide semantic information. .xmi files are not indexed by the Hawk UML components, to avoid conflicts with the plain EMF support (matching the file to the proper model resource is done strictly by file extension). You are recommended to rename your UML2 XMI files to .uml for now.","title":"Supported file extensions"},{"location":"basic-use/papyrus/#predefined-uml-packages","text":"UML2 provides an implementation of the UML standard libraries, with packages containing some common datatypes (e.g. String or Integer). If your models use any of these libraries, we heavily recommend that you add a PredefinedUMLLibraries component in your \"Indexed Locations\" section. Otherwise, any references from your models to the libraries will be left unresolved, and you will not be able to use those predefined entities in your queries. This is because Hawk operates normally on files, and the predefined UML libraries are generally bundled within the UML2 plugins. The PredefinedUMLLibraries exposes those bundled resources to Hawk in a way that is transparent to the querying language.","title":"Predefined UML packages"},{"location":"basic-use/papyrus/#multi-version-papyrus-uml-profile-support","text":"Beyond registering all the metamodels required to index plain UML models, the UML metamodel resource factory in Hawk can register .profile.uml files as metamodels. This allows us to index UML models with custom profiles in Hawk. Since UML profiles can be versioned, Hawk will register version X.Y.Z of profile with URI http://your/profile with http://your/profile/X.Y.Z as the URI. When querying with Hawk, you will have to specify http://your/profile/X.Y.Z in your default namespaces, in order to resolve the ambiguity that may exist between multiple versions of the same metamodel. If a new version of the UML profile is created, you will need to register the .profile.uml file again with Hawk before it can index models that use that version of the profile. Hawk treats entities of different versions of the same profile as entirely different types. In terms of implementation details, Hawk takes advantage of the fact that .profile.uml files contain a collection of Ecore EPackages . Hawk simply adds the /X.Y.Z version suffix to their namespace URI, and otherwise leaves them untouched.","title":"Multi-version Papyrus UML profile support"},{"location":"basic-use/papyrus/#example-using-hawk-to-index-all-uml-models-in-an-eclipse-workspace","text":"We will show how Hawk can be used to index all the UML models in an Eclipse workspace, including those that have custom profiles applied to them. To illustrate our approach, we will use these toy models created with Papyrus. We assume that you have installed Hawk into your Eclipse instance, following the steps in [[this wiki page|Installation]].","title":"Example: using Hawk to index all UML models in an Eclipse workspace"},{"location":"basic-use/papyrus/#models","text":"The model is a very simple UML class diagram: It only has two classes, one of which has the <<Special>> stereotype with a priority property equal to 23. This value is not shown in the diagram, but it can be checked from the \"Profile\" page of the \"Properties\" view when the class is selected. The profile including the <<Special>> stereotype is also very simple: The diagram imports the Class UML metaclass, and then extends it with the <<Special>> stereotype.","title":"Models"},{"location":"basic-use/papyrus/#creating-the-hawk-index","text":"Before we can run any queries, we need to create a Hawk index. If we have installed Hawk correctly, we will be able to open the \"Hawk\" view and see something like this: Right now, we have no indexes in Hawk. We need to press the \"Add\" button, which is highlighted in red above. We should see a dialog similar to this: Important points: We can pick any name we want, as long as it is unique. Instance type should be a LocalHawkFactory if we intend to index our workspace. The Local storage folder will contain some of the configuration of that Hawk instance, and the database. Remote location is irrelevant when using the LocalHawkFactory . If we are only interested in indexing the UML models in the workspace, it is a good idea to Disable all the plugins and then check only the UML metamodel and model resource factories. You can choose to use Neo4j (if you [[build it on your own|Running from source]]), OrientDB, or any other backend we may support in the future. Min/Max Delay indicate how often will Hawk poll all the indexed locations. If you are only indexing the current workspace, you can leave both at 0 to disable polling: regardless of this setting, Hawk will react automatically whenever something in the workspace changes. Once the index has been created, you should see an entry for it in the \"Hawk\" view:","title":"Creating the Hawk index"},{"location":"basic-use/papyrus/#adding-metamodels-and-models","text":"From the screenshot above, we know that the index is RUNNING (available for queries) and not UPDATING nor STOPPED , so we can start configuring it as we need. First, we should double click on it to open the configuration dialog: We should go to the \"Metamodels\" tab and click on \"Add...\", then select the specialThings.profile/model.profile.uml file. Hawk will register our custom profile as a metamodel, and we will be ready to index models using all the versions of this profile so far. Should we define any newer versions, we will have to add the file again to Hawk. The dialog will now list the new metamodel: Now we are ready to add the locations where the models to be indexed are stored. We go to the \"Indexed Locations\" tab and click on \"Add\". First, we will add the predefined UML libraries with some commonly used instances (e.g. UML data types): We need to pick the right \"Type\", and then enter / in the \"Location\" field. The location is ignored for this repository, but due to current limitations in the UI we have to enter something in the field. Next, we have to tell Hawk to index all the models in the workspace. We will \"Add\" another location, and this time fill the dialog like this: Again, the / \"Location\" is irrelevant but required by the UI. Hawk will spend some time UPDATING , and once it is RUNNING again we will be ready to run some queries on it.","title":"Adding metamodels and models"},{"location":"basic-use/papyrus/#querying-hawk","text":"We can finally query Hawk now. To do so, we need to select our index on the \"Hawk\" view and click on the \"Query\" button, which looks like a magnifying glass: We will see a dialog like this one, with all fields empty: Enter the query return Class.all.name; and click on the \"Run Query\" button. This query lists the names of all the classes indexed so far by Hawk. You will notice that we obtain these results: [E, T, MyClass, Special, V, NotSoSpecial, Stereotype1, K, E] The E/T/V/K/E classes came from the predefined UML libraries. If you want only the results from your workspace, you must tell Hawk through the \"Context Repositories\" field, by entering platform:/resource . This is the base URI used by Hawk to identify all the files in your workspace. Click on \"Run Query\" again, and you should obtain the results shown in the screenshot: [MyClass, Stereotype1, Special, NotSoSpecial] Note how the query also returns the classes in the profile. Should you want to avoid this, you can either use the \"Context Files\" field ( *model.uml will do this) to further restrict the scope of the query.","title":"Querying Hawk"},{"location":"basic-use/papyrus/#finding-uml-objects-by-stereotype","text":"If you would like to find all applications of stereotype X , you can simply use X.all and then use base_Metaclass to find the object that was annotated with that stereotype. For instance, this query will find the name of all the classes that had the <<Special>> stereotype applied to them: return Special.all.base_Class.name; You will get: [MyClass] You can also access stereotype properties: return Special.all.collect(s| Sequence { s.priority, s.base_Class.name } ).asSequence; This will produce: [[23, MyClass]]","title":"Finding UML objects by stereotype"},{"location":"basic-use/papyrus/#finding-stereotype-applications-from-the-uml-object","text":"If you want to go the other way around, you can use reverse reference navigation on those base_X references to find the stereotypes that have been applied to a UML object: return Class.all .selectOne(s|s.name = 'MyClass') .revRefNav_base_Class .collect(st|Model.getTypeOf(st)) .name; This would produce: [Special]","title":"Finding stereotype applications from the UML object"},{"location":"developers/plain-maven/","text":"Hawk can be reused as a library in a regular Java application, outside OSGi. Non-OSGi developers normally use Maven or a Maven-compatible build system (e.g. Ivy or SBT), rather than Tycho. To make it easier for these developers, Hawk provides a parallel hierarchy of pom-plain.xml files that can be used to build Hawk with plain Maven ( pom.xml files are reserved for Tycho). Not all Hawk modules are available through this build, as they may rely on OSGi (e.g. org.hawk.modelio ) or require downloading many external dependencies (e.g. org.hawk.bpmn ). .feature , .dependencies and .tests projects are not included either, as they are OSGi-specific. For that reason, this build should only be used for distribution, and not for regular development. To build with regular Maven, run mvn -f pom-plain.xml install from the root of the repository to compile the artifacts and install them into the local Maven repository, so they can be used in other Maven builds.","title":"Build with plain Maven"},{"location":"developers/run-from-source/","text":"These instructions are from a clean download of an Eclipse Luna Modelling distribution and include all optional dependencies. Clone this Git repository on your Eclipse instance (e.g. using git clone or EGit) and import all projects into the workspace (File > Import > Existing Projects into Workspace). Open the org.hawk.targetplatform/org.hawk.targetplatform.target file, wait for the target definition to be resolved and click on Set as Target Platform . Install IvyDE into your Eclipse instance, right click on org.hawk.neo4j-v2.dependencies and use \"Ivy > Retrieve 'dependencies'\". The libraries should appear within Referenced Libraries . Do the same for these other projects: org.hawk.orientdb org.hawk.localfolder org.hawk.greycat Force a full rebuild with Project > Clean... > Clean all projects if you still have errors. After all these steps, you should have a working version of Hawk with all optional dependencies and no errors. You can now use \"Run as... > Eclipse Application\" to open a nested Eclipse with the Hawk GUI running inside it.","title":"Run GUI from source"},{"location":"developers/server-from-source/","text":"In order to run the server products from the sources, you need to first install the [[Dependencies]] and follow the [[basic steps|Running from source]] for running Hawk from source. Once you have done that, to run the server product, you should open the relevant .product file. The editor will look like this one: You should use one of the buttons highlighted in red (the triangle \"Run\" button or the bug-like \"Debug\" button) to run the product for the first time. It may fail, due to the slightly buggy way in which Eclipse produces the launch configuration from the product. If you see this: !ENTRY org.eclipse.osgi 4 0 2017-04-15 13:51:14.444 !MESSAGE Application error !STACK 1 java.lang.RuntimeException: No application id has been found. That means you need to tweak the launch configuration a bit. Shutdown the server by entering shutdown and then close in the \"Console\" view, and then open the \"Run\" menu and select \"Run Configurations...\". Select the relevant \"Eclipse Application\" launch configuration and go to the \"Plug-ins\" section: Click on \"Add Required Plugins\": you'll notice that it adds quite a few things. Click on \"Run\" now: it should work fine. Eventually, you should see this text: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. You are done! You can also use \"Debug\" to track bugs in the server itself.","title":"Run Server from source"},{"location":"developers/website/","text":"The website for Eclipse Hawk is written in MkDocs . The website repository is available here: https://git.eclipse.org/c/www.eclipse.org/hawk.git/ To work on the website, clone it with your Eclipse credentials, and follow the instructions in the included README.md file.","title":"Work on the website"},{"location":"server/api-security/","text":"In some cases, we may want to protect the API from unaccounted use, as clients would have access to potentially sensitive information. In order to provide this access control, the Apache Shiro library has been integrated transparently as a filter for all incoming requests to the endpoints under /thrift . /thrift-local endpoints are not password-protected, as they only answer requests from other processes in the machine hosting the MONDO Server. Apache Shiro protects these /thrift endpoints using standard HTTP Basic authentication, which is transparent to Thrift, avoiding the need to pollute the web API with access tokens in every single method. Industrial partners will be instructed to always use the authentication layer in combination with SSL, since HTTP Basic by itself is insecure. One important advantage of Shiro is its configurability through a single .ini file, like this one: [main] # Objects and their properties are defined here, # Such as the securityManager, Realms and anything # else needed to build the SecurityManager # Note: this should be set to true in production! ssl.enabled = true # Toggle to enable/disable authentication completely authcBasic.enabled = true # Use Hawk realm mondoRealm = uk.ac.york.mondo.integration.server.users.servlet.shiro.UsersRealm securityManager.realms = $mondoRealm # We\u2019re using SHA\u2212512 for passwords, with 10k iterations credentialsMatcher = org.apache.shiro.authc.credential.Sha512CredentialsMatcher credentialsMatcher.hashIterations = 10000 mondoRealm.credentialsMatcher = $credentialsMatcher [urls] /thrift/** = ssl, authcBasic Shiro is heavily componentized, making it easy to provide alternative implementations of certain pieces and reuse the default implementations for the rest. In the shown example, all requests to the /thrift endpoints go through the default ssl and authcBasic filters: when enabled, these filters enforce the use of SSL and HTTP Basic authentication respectively. Both filters should be enabled in production environments. For the HTTP Basic authentication, the server provides its own implementation of a Shiro security realm, which is dedicated to storing and retrieving user details. The security realm uses an embedded MapDB database to persist these user details, which are managed through the Users service (Section 5.2.4). An embedded database was used in order to prevent end users from having to set up a database just to store a small set of users. MapDB is distributed as a single .jar file, making it very simple to integrate. In any case, the realm could be replaced with another one if desired by editing shiro.ini on an installation. Passwords for the MONDO realm are stored in a hashed and salted form, using 10000 iterations of SHA-512 and a random per-password salt. As for the client side, the command-line based clients accept optional arguments for the required credentials when connecting to the Thrift endpoints. If the password is omitted, the command-line based clients will require it in a separate \"silent\" prompt that does not show the characters that are typed, preventing shoulder surfing attacks. Due to limitations in the Eclipse graphical user interface, these silent prompts are only available when running the command-line based clients from a proper terminal window and not from the Eclipse \"Console\" view. The graphical clients connect to the Thrift endpoints using \u201clazy\u201d credential providers: if authentication is required, they will attempt to retrieve previously used credentials from the Eclipse secure store and if no such credentials exist, they will show an authentication dialog asking for the username and password to be used. The Eclipse secure storage takes advantage of the access control and encryption capabilities of the underlying operating system as much as possible, and makes it possible to store passwords safely and conveniently. These stored MONDO server credentials can be managed from the \"Hawk Servers\" preference page. Regarding the Artemis messaging queue, it has been secured with the same Shiro realm as the Thrift endpoints. The remote Hawk EMF abstraction (the only component that uses Artemis within the MONDO platform) will connect to Artemis with the same credentials that were used to connect to Thrift, if authentication was required.","title":"Thrift API security"},{"location":"server/api/","text":"Services \u00b6 Hawk \u00b6 The following service operations expose the capabilities of the Hawk heterogeneous model indexing framework. Hawk.createInstance \u00b6 Creates a new Hawk instance (stopped). Returns void . Takes these parameters: Name Type Documentation name string The unique name of the new Hawk instance. backend string The name of the backend to be used, as returned by listBackends(). minimumDelayMillis i32 Minimum delay between periodic synchronization in milliseconds. maximumDelayMillis i32 Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization). enabledPlugins (optional) list List of plugins to be enabled: if not set, all plugins are enabled. Hawk.listBackends \u00b6 Lists the names of the available storage backends. Returns list<string> . Does not take any parameters. Hawk.listPlugins \u00b6 Lists all the Hawk plugins that can be enabled or disabled: metamodel parsers, model parsers and graph change listeners. Returns list<string> . Does not take any parameters. Hawk.listInstances \u00b6 Lists the details of all Hawk instances. Returns list<HawkInstance> . Does not take any parameters. Hawk.removeInstance \u00b6 Removes an existing Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to remove. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. Hawk.startInstance \u00b6 Starts a stopped Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to start. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. Hawk.stopInstance \u00b6 Stops a running Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.syncInstance \u00b6 Forces an immediate synchronization on a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. blockUntilDone (optional) bool If true, blocks the call until the synchronisation completes. False by default. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.registerMetamodels \u00b6 Registers a set of file-based metamodels with a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The metamodels to register. More than one metamodel file can be provided in one request, to accomodate fragmented metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. InvalidMetamodel The provided metamodel is not valid (e.g. unparsable or inconsistent). HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.unregisterMetamodels \u00b6 Unregisters a metamodel from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The URIs of the metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listMetamodels \u00b6 Lists the URIs of the registered metamodels of a Hawk instance. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listQueryLanguages \u00b6 Lists the supported query languages and their status. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. Hawk.query \u00b6 Runs a query on a Hawk instance and returns a sequence of scalar values and/or model elements. Returns QueryResult . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. query string The query to be executed. language string The name of the query language used (e.g. EOL, OCL). options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownQueryLanguage The specified query language is not supported by the operation. InvalidQuery The specified query is not valid. FailedQuery The specified query failed to complete its execution. Hawk.resolveProxies \u00b6 Returns populated model elements for the provided proxies. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. ids list Proxy model element IDs to be resolved. options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.addRepository \u00b6 Asks a Hawk instance to start monitoring a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repo Repository The repository to monitor. credentials (optional) Credentials A valid set of credentials that has read-access to the repository. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownRepositoryType The specified repository type is not supported by the operation. VCSAuthenticationFailed The client failed to prove its identity in the VCS. Hawk.isFrozen \u00b6 Returns true if a repository is frozen, false otherwise. Returns bool . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.setFrozen \u00b6 Changes the 'frozen' state of a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to be changed. isFrozen bool Whether the repository should be frozen (true) or not (false). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.removeRepository \u00b6 Asks a Hawk instance to stop monitoring a repository and remove its elements from the graph. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to stop monitoring. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.updateRepositoryCredentials \u00b6 Changes the credentials used to monitor a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to update. cred Credentials The new credentials to be used. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listRepositories \u00b6 Lists the repositories monitored by a Hawk instance. Returns list<Repository> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listRepositoryTypes \u00b6 Lists the available repository types in this installation. Returns list<string> . Does not take any parameters. Hawk.listFiles \u00b6 Lists the paths of the files of the indexed repository. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repository list The URI of the indexed repository. filePatterns list File name patterns to search for (* lists all files). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.configurePolling \u00b6 Sets the base polling period and max interval of a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. base i32 The base polling period (in seconds). max i32 The maximum polling interval (in seconds). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidPollingConfiguration The polling configuration is not valid. Hawk.addDerivedAttribute \u00b6 Add a new derived attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the new derived attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidDerivedAttributeSpec The derived attribute specification is not valid. Hawk.removeDerivedAttribute \u00b6 Remove a derived attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the derived attribute to be removed. Only the first three fields of the spec need to be populated. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listDerivedAttributes \u00b6 Lists the derived attributes of a Hawk instance. Only the first three fields of the spec are currently populated. Returns list<DerivedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.addIndexedAttribute \u00b6 Add a new indexed attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the new indexed attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidIndexedAttributeSpec The indexed attribute specification is not valid. Hawk.removeIndexedAttribute \u00b6 Remove a indexed attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the indexed attribute to be removed. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.listIndexedAttributes \u00b6 Lists the indexed attributes of a Hawk instance. Returns list<IndexedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.getModel \u00b6 Returns the contents of one or more models indexed in a Hawk instance. Cross-model references are also resolved, and contained objects are always sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.getRootElements \u00b6 Returns the root objects of one or more models indexed in a Hawk instance. Node IDs are always sent, and contained objects are never sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. Hawk.watchStateChanges \u00b6 Returns subscription details to a queue of HawkStateEvents with notifications about changes in the indexer's state. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. Hawk.watchModelChanges \u00b6 Returns subscription details to a queue of HawkChangeEvents with notifications about changes to a set of indexed models. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repositoryUri string The URI of the repository in which the model is contained. filePath list The pattern(s) for the model file(s) in the repository. clientID string Unique client ID (used as suffix for the queue name). durableEvents SubscriptionDurability Durability of the subscription. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. IFCExport \u00b6 IFC export facility for getting IFC models from the Hawk server. IFCExport.exportAsSTEP \u00b6 Export part of a Hawk index in IFC STEP format. Returns IFCExportJob . Takes these parameters: Name Type Documentation hawkInstance string options IFCExportOptions IFCExport.getJobs \u00b6 List all the previously scheduled IFC export jobs. Returns list<IFCExportJob> . Does not take any parameters. IFCExport.getJobStatus \u00b6 Retrieve the current status of the job with the specified ID. Returns IFCExportJob . Takes these parameters: Name Type Documentation jobID string IFCExport.killJob \u00b6 Cancel the job with the specified ID. Returns bool . Takes these parameters: Name Type Documentation jobID string Users \u00b6 The majority of service operations provided by the server require user authentication (indicated in the top-left cell of each operation table) to prevent unaccountable use. As such, the platform needs to provide basic user management service operations for creating, updating and deleting user accounts. When handling passwords, only SSL should be used, as otherwise they could be intercepted. Users.createUser \u00b6 Creates a new platform user. Returns void . Takes these parameters: Name Type Documentation username string A unique identifier for the user. password string The desired password. profile UserProfile The profile of the user. May throw these exceptions: Name Documentation UserExists The specified username already exists. Users.updateProfile \u00b6 Updates the profile of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. profile UserProfile The updated profile of the user. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Users.updatePassword \u00b6 Updates the password of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. newPassword string New password to be set. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Users.deleteUser \u00b6 Deletes a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to delete. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist. Entities \u00b6 AttributeSlot \u00b6 Represents a slot that can store the value(s) of an attribute of a model element. Inherits from: Slot. Name Type Documentation name (inherited) string The name of the model element property the value of which is stored in this slot. value (optional) SlotValue Value of the slot (if set). Used in: ModelElement. CommitItem \u00b6 Simplified entry within a commit of a repository. Name Type Documentation path string Path within the repository, using / as separator. repoURL string URL of the repository. revision string Unique identifier of the revision of the repository. type CommitItemChangeType Type of change within the commit. Used in: HawkModelElementAdditionEvent, HawkModelElementRemovalEvent, HawkAttributeUpdateEvent, HawkAttributeRemovalEvent, HawkReferenceAdditionEvent, HawkReferenceRemovalEvent, HawkFileAdditionEvent, HawkFileRemovalEvent. ContainerSlot \u00b6 Represents a slot that can store other model elements within a model element. Inherits from: Slot. Name Type Documentation elements list Contained elements for this slot. name (inherited) string The name of the model element property the value of which is stored in this slot. Used in: ModelElement. Credentials \u00b6 Credentials of the client in the target VCS. Name Type Documentation password string Password for logging into the VCS. username string Username for logging into the VCS. Used in: Hawk.addRepository, Hawk.updateRepositoryCredentials. DerivedAttributeSpec \u00b6 Used to configure Hawk's derived attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the derived attribute. attributeType (optional) string The (primitive) type of the derived attribute. derivationLanguage (optional) string The language used to express the derivation logic. derivationLogic (optional) string An executable expression of the derivation logic in the language above. isMany (optional) bool The multiplicity of the derived attribute. isOrdered (optional) bool A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true). isUnique (optional) bool A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true). metamodelUri string The URI of the metamodel to which the derived attribute belongs. typeName string The name of the type to which the derived attribute belongs. Used in: Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes. EffectiveMetamodel \u00b6 Representation of a set of rules for either including or excluding certain types and/or slots within a metamodel. Name Type Documentation slots set Slots within the type that should be included or excluded: empty means 'all slots'. type string Type that should be included or excluded. Used in: EffectiveMetamodelMap. EffectiveMetamodelMap \u00b6 Representation of a set of rules for either including or excluding metamodels, types or slots. Name Type Documentation metamodel map > Types and slots within the metamodel that should be included or excluded: empty means 'all types and slots'. uri string Namespace URI of the metamodel. Used in: HawkQueryOptions, IFCExportOptions. File \u00b6 A file to be sent through the network. Name Type Documentation contents binary Sequence of bytes with the contents of the file. name string Name of the file. Used in: Hawk.registerMetamodels. HawkAttributeRemovalEvent \u00b6 Serialized form of an attribute removal event. Name Type Documentation attribute string Name of the attribute that was removed. id string Identifier of the model element that was changed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkAttributeUpdateEvent \u00b6 Serialized form of an attribute update event. Name Type Documentation attribute string Name of the attribute that was changed. id string Identifier of the model element that was changed. value SlotValue New value for the attribute. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkChangeEvent \u00b6 Serialized form of a change in the indexed models of a Hawk instance. Name Type Documentation fileAddition HawkFileAdditionEvent A file was added. fileRemoval HawkFileRemovalEvent A file was removed. modelElementAddition HawkModelElementAdditionEvent A model element was added. modelElementAttributeRemoval HawkAttributeRemovalEvent An attribute was removed. modelElementAttributeUpdate HawkAttributeUpdateEvent An attribute was updated. modelElementRemoval HawkModelElementRemovalEvent A model element was removed. referenceAddition HawkReferenceAdditionEvent A reference was added. referenceRemoval HawkReferenceRemovalEvent A reference was removed. syncEnd HawkSynchronizationEndEvent Synchronization ended. syncStart HawkSynchronizationStartEvent Synchronization started. HawkFileAdditionEvent \u00b6 Serialized form of a file addition event. Name Type Documentation vcsItem CommitItem Reference to file that was added, including VCS metadata. Used in: HawkChangeEvent. HawkFileRemovalEvent \u00b6 A file was removed. Name Type Documentation vcsItem CommitItem Reference to file that was removed, including VCS metadata. Used in: HawkChangeEvent. HawkInstance \u00b6 Status of a Hawk instance. Name Type Documentation message string Last info message from the instance. name string The name of the instance. state HawkState Current state of the instance. Used in: Hawk.listInstances. HawkModelElementAdditionEvent \u00b6 Serialized form of a model element addition event. Name Type Documentation id string Identifier of the model element that was added. metamodelURI string Metamodel URI of the type of the model element. typeName string Name of the type of the model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkModelElementRemovalEvent \u00b6 Serialized form of a model element removal event. Name Type Documentation id string Identifier of the model element that was removed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkQueryOptions \u00b6 Options for a Hawk query. Name Type Documentation defaultNamespaces (optional) string The default namespaces to be used to resolve ambiguous unqualified types. effectiveMetamodelExcludes (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. effectiveMetamodelIncludes (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeAttributes (optional) bool Whether to include attributes (true) or not (false) in model element results. includeContained (optional) bool Whether to include all the child elements of the model element results (true) or not (false). includeDerived (optional) bool Whether to include derived attributes (true) or not (false) in model element results. includeNodeIDs (optional) bool Whether to include node IDs (true) or not (false) in model element results. includeReferences (optional) bool Whether to include references (true) or not (false) in model element results. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: Hawk.query, Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements. HawkReferenceAdditionEvent \u00b6 Serialized form of a reference addition event. Name Type Documentation refName string Name of the reference that was added. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkReferenceRemovalEvent \u00b6 Serialized form of a reference removal event. Name Type Documentation refName string Name of the reference that was removed. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent. HawkStateEvent \u00b6 Serialized form of a change in the state of a Hawk instance. Name Type Documentation message string Short message about the current status of the server. state HawkState State of the Hawk instance. timestamp i64 Timestamp for this state change. HawkSynchronizationEndEvent \u00b6 Serialized form of a sync end event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent. HawkSynchronizationStartEvent \u00b6 Serialized form of a sync start event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent. IFCExportJob \u00b6 Information about a server-side IFC export job. Name Type Documentation jobID string message string status IFCExportStatus Used in: IFCExport.exportAsSTEP, IFCExport.getJobs, IFCExport.getJobStatus. IFCExportOptions \u00b6 Options for a server-side IFC export. Name Type Documentation excludeRules (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeRules (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: IFCExport.exportAsSTEP. IndexedAttributeSpec \u00b6 Used to configure Hawk's indexed attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the indexed attribute. metamodelUri string The URI of the metamodel to which the indexed attribute belongs. typeName string The name of the type to which the indexed attribute belongs. Used in: Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes. InvalidModelSpec \u00b6 The model specification is not valid: the model or the metamodels are inaccessible or invalid. Name Type Documentation reason string Reason for the spec not being valid. spec ModelSpec A copy of the invalid model specification. InvalidTransformation \u00b6 The transformation is not valid: it is unparsable or inconsistent. Name Type Documentation location string Location of the problem, if applicable. Usually a combination of line and column numbers. reason string Reason for the transformation not being valid. MixedReference \u00b6 Represents a reference to a model element: it can be an identifier or a position. Only used when the same ReferenceSlot has both identifier-based and position-based references. This may be the case if we are retrieving a subset of the model which has references between its elements and with elements outside the subset at the same time. Name Type Documentation id string Identifier-based reference to a model element. position i32 Position-based reference to a model element. Used in: ReferenceSlot. ModelElement \u00b6 Represents a model element. Name Type Documentation attributes (optional) list Slots holding the values of the model element's attributes, if any have been set. containers (optional) list Slots holding contained model elements, if any have been set. file (optional) string Name of the file to which the element belongs (not set if equal to that of the previous model element). id (optional) string Unique ID of the model element (not set if using position-based references). metamodelUri (optional) string URI of the metamodel to which the type of the element belongs (not set if equal to that of the previous model element). references (optional) list Slots holding the values of the model element's references, if any have been set. repositoryURL (optional) string URI of the repository to which the element belongs (not set if equal to that of the previous model element). typeName (optional) string Name of the type that the model element is an instance of (not set if equal to that of the previous model element). Used in: Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements, ContainerSlot, QueryResult. ModelElementType \u00b6 Represents a type of model element. Name Type Documentation attributes (optional) list Metadata for the attribute slots. id string Unique ID of the model element type. metamodelUri string URI of the metamodel to which the type belongs. references (optional) list Metadata for the reference slots. typeName string Name of the type. Used in: QueryResult. ModelSpec \u00b6 Captures information about source/target models of ATL transformations. Name Type Documentation metamodelUris list The URIs of the metamodels to which elements of the model conform. uri string The URI from which the model will be loaded or to which it will be persisted. Used in: InvalidModelSpec. QueryResult \u00b6 Union type for a scalar value, a reference to a model element, a heterogeneous list or a string/value map. Query results may return all types of results, so we need to stay flexible. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vByte (inherited) byte 8-bit signed integer value. vDouble (inherited) double 64-bit floating point value. vInteger (inherited) i32 32-bit signed integer value. vList list Nested list of query results. vLong (inherited) i64 64-bit signed integer value. vMap map Map between query results. vModelElement ModelElement Encoded model element. vModelElementType ModelElementType Encoded model element type. vShort (inherited) i16 16-bit signed integer value. vString (inherited) string Sequence of UTF8 characters. Used in: Hawk.query, QueryResult, QueryResultMap. QueryResultMap \u00b6 Name Type Documentation name string value QueryResult Used in: QueryResult. ReferenceSlot \u00b6 Represents a slot that can store the value(s) of a reference of a model element. References can be expressed as positions within a result tree (using pre-order traversal) or IDs. id, ids, position, positions and mixed are all mutually exclusive. At least one position or one ID must be given. Inherits from: Slot. Name Type Documentation id (optional) string Unique identifier of the referenced element (if there is only one ID based reference in this slot). ids (optional) list Unique identifiers of the referenced elements (if more than one). mixed (optional) list Mix of identifier- and position-bsaed references (if there is at least one position and one ID). name (inherited) string The name of the model element property the value of which is stored in this slot. position (optional) i32 Position of the referenced element (if there is only one position-based reference in this slot). positions (optional) list Positions of the referenced elements (if more than one). Used in: ModelElement. Repository \u00b6 Entity that represents a model repository. Name Type Documentation isFrozen (optional) bool True if the repository is frozen, false otherwise. type string The type of repository. uri string The URI to the repository. Used in: Hawk.addRepository, Hawk.listRepositories. Slot \u00b6 Represents a slot that can store the value(s) of a property of a model element. Inherited by: AttributeSlot, ReferenceSlot, ContainerSlot. Name Type Documentation name string The name of the model element property the value of which is stored in this slot. SlotMetadata \u00b6 Represents the metadata of a slot in a model element type. Name Type Documentation isMany bool True if this slot holds a collection of values instead of a single value. isOrdered bool True if the values in this slot are ordered. isUnique bool True if the value of this slot must be unique within its containing model. name string The name of the model element property that is stored in this slot. type string The type of the values in this slot. Used in: ModelElementType. SlotValue \u00b6 Union type for a single scalar value or a homogeneous collection of scalar values. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vBooleans list List of true/false values. vByte (inherited) byte 8-bit signed integer value. vBytes binary List of 8-bit signed integers. vDouble (inherited) double 64-bit floating point value. vDoubles list List of 64-bit floating point values. vInteger (inherited) i32 32-bit signed integer value. vIntegers list List of 32-bit signed integers. vLong (inherited) i64 64-bit signed integer value. vLongs list List of 64-bit signed integers. vShort (inherited) i16 16-bit signed integer value. vShorts list List of 16-bit signed integers. vString (inherited) string Sequence of UTF8 characters. vStrings list List of sequences of UTF8 characters. Used in: HawkAttributeUpdateEvent, AttributeSlot. Subscription \u00b6 Details about a subscription to a topic queue. Name Type Documentation host string Host name of the message queue server. port i32 Port in which the message queue server is listening. queueAddress string Address of the topic queue. queueName string Name of the topic queue. sslRequired bool Whether SSL is required or not. Used in: Hawk.watchStateChanges, Hawk.watchModelChanges. UserProfile \u00b6 Minimal details about registered users. Name Type Documentation admin bool Whether the user has admin rights (i.e. so that they can create new users, change the status of admin users etc). realName string The real name of the user. Used in: Users.createUser, Users.updateProfile. Value \u00b6 Union type for a single scalar value. Inherited by: QueryResult, SlotValue. Name Type Documentation vBoolean bool Boolean (true/false) value. vByte byte 8-bit signed integer value. vDouble double 64-bit floating point value. vInteger i32 32-bit signed integer value. vLong i64 64-bit signed integer value. vShort i16 16-bit signed integer value. vString string Sequence of UTF8 characters. Enumerations \u00b6 CommitItemChangeType \u00b6 Type of change within a commit. Name Documentation ADDED File was added. DELETED File was removed. REPLACED File was removed. UNKNOWN Unknown type of change. UPDATED File was updated. HawkState \u00b6 One of the states that a Hawk instance can be in. Name Documentation RUNNING The instance is running and monitoring the indexed locations. STOPPED The instance is stopped and is not monitoring any indexed locations. UPDATING The instance is updating its contents from the indexed locations. IFCExportStatus \u00b6 Status of a server-side IFC export job. Name Documentation CANCELLED The job has been cancelled. DONE The job is completed. FAILED The job has failed. RUNNING The job is currently running. SCHEDULED The job has been scheduled but has not started yet. SubscriptionDurability \u00b6 Durability of a subscription. Name Documentation DEFAULT Subscription survives client disconnections but not server restarts. DURABLE Subscription survives client disconnections and server restarts. TEMPORARY Subscription removed after disconnecting. ## Exceptions FailedQuery \u00b6 The specified query failed to complete its execution. Name Type Documentation reason string Reason for the query failing to complete its execution. Used in: Hawk.query. HawkInstanceNotFound \u00b6 No Hawk instance exists with that name. No fields for this entity. Used in: Hawk.removeInstance, Hawk.startInstance, Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges. HawkInstanceNotRunning \u00b6 The selected Hawk instance is not running. No fields for this entity. Used in: Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges. InvalidDerivedAttributeSpec \u00b6 The derived attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addDerivedAttribute. InvalidIndexedAttributeSpec \u00b6 The indexed attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addIndexedAttribute. InvalidMetamodel \u00b6 The provided metamodel is not valid (e.g. unparsable or inconsistent). Name Type Documentation reason string Reason for the metamodel not being valid. Used in: Hawk.registerMetamodels. InvalidPollingConfiguration \u00b6 The polling configuration is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.configurePolling. InvalidQuery \u00b6 The specified query is not valid. Name Type Documentation reason string Reason for the query not being valid. Used in: Hawk.query. UnknownQueryLanguage \u00b6 The specified query language is not supported by the operation. No fields for this entity. Used in: Hawk.query. UnknownRepositoryType \u00b6 The specified repository type is not supported by the operation. No fields for this entity. Used in: Hawk.addRepository. UserExists \u00b6 The specified username already exists. No fields for this entity. Used in: Users.createUser. UserNotFound \u00b6 The specified username does not exist. No fields for this entity. Used in: Users.updateProfile, Users.updatePassword, Users.deleteUser. VCSAuthenticationFailed \u00b6 The client failed to prove its identity in the VCS. No fields for this entity. Used in: Hawk.addRepository. This file was automatically generated by Ecore2Thrift. https://github.com/bluezio/ecore2thrift","title":"Thrift API"},{"location":"server/api/#services","text":"","title":"Services"},{"location":"server/api/#hawk","text":"The following service operations expose the capabilities of the Hawk heterogeneous model indexing framework.","title":"Hawk"},{"location":"server/api/#hawkcreateinstance","text":"Creates a new Hawk instance (stopped). Returns void . Takes these parameters: Name Type Documentation name string The unique name of the new Hawk instance. backend string The name of the backend to be used, as returned by listBackends(). minimumDelayMillis i32 Minimum delay between periodic synchronization in milliseconds. maximumDelayMillis i32 Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization). enabledPlugins (optional) list List of plugins to be enabled: if not set, all plugins are enabled.","title":"Hawk.createInstance"},{"location":"server/api/#hawklistbackends","text":"Lists the names of the available storage backends. Returns list<string> . Does not take any parameters.","title":"Hawk.listBackends"},{"location":"server/api/#hawklistplugins","text":"Lists all the Hawk plugins that can be enabled or disabled: metamodel parsers, model parsers and graph change listeners. Returns list<string> . Does not take any parameters.","title":"Hawk.listPlugins"},{"location":"server/api/#hawklistinstances","text":"Lists the details of all Hawk instances. Returns list<HawkInstance> . Does not take any parameters.","title":"Hawk.listInstances"},{"location":"server/api/#hawkremoveinstance","text":"Removes an existing Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to remove. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name.","title":"Hawk.removeInstance"},{"location":"server/api/#hawkstartinstance","text":"Starts a stopped Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to start. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name.","title":"Hawk.startInstance"},{"location":"server/api/#hawkstopinstance","text":"Stops a running Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.stopInstance"},{"location":"server/api/#hawksyncinstance","text":"Forces an immediate synchronization on a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance to stop. blockUntilDone (optional) bool If true, blocks the call until the synchronisation completes. False by default. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.syncInstance"},{"location":"server/api/#hawkregistermetamodels","text":"Registers a set of file-based metamodels with a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The metamodels to register. More than one metamodel file can be provided in one request, to accomodate fragmented metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. InvalidMetamodel The provided metamodel is not valid (e.g. unparsable or inconsistent). HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.registerMetamodels"},{"location":"server/api/#hawkunregistermetamodels","text":"Unregisters a metamodel from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. metamodel list The URIs of the metamodels. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.unregisterMetamodels"},{"location":"server/api/#hawklistmetamodels","text":"Lists the URIs of the registered metamodels of a Hawk instance. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listMetamodels"},{"location":"server/api/#hawklistquerylanguages","text":"Lists the supported query languages and their status. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance.","title":"Hawk.listQueryLanguages"},{"location":"server/api/#hawkquery","text":"Runs a query on a Hawk instance and returns a sequence of scalar values and/or model elements. Returns QueryResult . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. query string The query to be executed. language string The name of the query language used (e.g. EOL, OCL). options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownQueryLanguage The specified query language is not supported by the operation. InvalidQuery The specified query is not valid. FailedQuery The specified query failed to complete its execution.","title":"Hawk.query"},{"location":"server/api/#hawkresolveproxies","text":"Returns populated model elements for the provided proxies. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. ids list Proxy model element IDs to be resolved. options HawkQueryOptions Options for the query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.resolveProxies"},{"location":"server/api/#hawkaddrepository","text":"Asks a Hawk instance to start monitoring a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repo Repository The repository to monitor. credentials (optional) Credentials A valid set of credentials that has read-access to the repository. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. UnknownRepositoryType The specified repository type is not supported by the operation. VCSAuthenticationFailed The client failed to prove its identity in the VCS.","title":"Hawk.addRepository"},{"location":"server/api/#hawkisfrozen","text":"Returns true if a repository is frozen, false otherwise. Returns bool . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to query. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.isFrozen"},{"location":"server/api/#hawksetfrozen","text":"Changes the 'frozen' state of a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to be changed. isFrozen bool Whether the repository should be frozen (true) or not (false). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.setFrozen"},{"location":"server/api/#hawkremoverepository","text":"Asks a Hawk instance to stop monitoring a repository and remove its elements from the graph. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to stop monitoring. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeRepository"},{"location":"server/api/#hawkupdaterepositorycredentials","text":"Changes the credentials used to monitor a repository. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. uri string The URI of the repository to update. cred Credentials The new credentials to be used. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.updateRepositoryCredentials"},{"location":"server/api/#hawklistrepositories","text":"Lists the repositories monitored by a Hawk instance. Returns list<Repository> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listRepositories"},{"location":"server/api/#hawklistrepositorytypes","text":"Lists the available repository types in this installation. Returns list<string> . Does not take any parameters.","title":"Hawk.listRepositoryTypes"},{"location":"server/api/#hawklistfiles","text":"Lists the paths of the files of the indexed repository. Returns list<string> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repository list The URI of the indexed repository. filePatterns list File name patterns to search for (* lists all files). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listFiles"},{"location":"server/api/#hawkconfigurepolling","text":"Sets the base polling period and max interval of a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. base i32 The base polling period (in seconds). max i32 The maximum polling interval (in seconds). May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidPollingConfiguration The polling configuration is not valid.","title":"Hawk.configurePolling"},{"location":"server/api/#hawkaddderivedattribute","text":"Add a new derived attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the new derived attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidDerivedAttributeSpec The derived attribute specification is not valid.","title":"Hawk.addDerivedAttribute"},{"location":"server/api/#hawkremovederivedattribute","text":"Remove a derived attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec DerivedAttributeSpec The details of the derived attribute to be removed. Only the first three fields of the spec need to be populated. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeDerivedAttribute"},{"location":"server/api/#hawklistderivedattributes","text":"Lists the derived attributes of a Hawk instance. Only the first three fields of the spec are currently populated. Returns list<DerivedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listDerivedAttributes"},{"location":"server/api/#hawkaddindexedattribute","text":"Add a new indexed attribute to a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the new indexed attribute. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running. InvalidIndexedAttributeSpec The indexed attribute specification is not valid.","title":"Hawk.addIndexedAttribute"},{"location":"server/api/#hawkremoveindexedattribute","text":"Remove a indexed attribute from a Hawk instance. Returns void . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. spec IndexedAttributeSpec The details of the indexed attribute to be removed. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.removeIndexedAttribute"},{"location":"server/api/#hawklistindexedattributes","text":"Lists the indexed attributes of a Hawk instance. Returns list<IndexedAttributeSpec> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.listIndexedAttributes"},{"location":"server/api/#hawkgetmodel","text":"Returns the contents of one or more models indexed in a Hawk instance. Cross-model references are also resolved, and contained objects are always sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.getModel"},{"location":"server/api/#hawkgetrootelements","text":"Returns the root objects of one or more models indexed in a Hawk instance. Node IDs are always sent, and contained objects are never sent. Returns list<ModelElement> . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. options HawkQueryOptions Options to limit the contents to be sent.","title":"Hawk.getRootElements"},{"location":"server/api/#hawkwatchstatechanges","text":"Returns subscription details to a queue of HawkStateEvents with notifications about changes in the indexer's state. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.watchStateChanges"},{"location":"server/api/#hawkwatchmodelchanges","text":"Returns subscription details to a queue of HawkChangeEvents with notifications about changes to a set of indexed models. Returns Subscription . Takes these parameters: Name Type Documentation name string The name of the Hawk instance. repositoryUri string The URI of the repository in which the model is contained. filePath list The pattern(s) for the model file(s) in the repository. clientID string Unique client ID (used as suffix for the queue name). durableEvents SubscriptionDurability Durability of the subscription. May throw these exceptions: Name Documentation HawkInstanceNotFound No Hawk instance exists with that name. HawkInstanceNotRunning The selected Hawk instance is not running.","title":"Hawk.watchModelChanges"},{"location":"server/api/#ifcexport","text":"IFC export facility for getting IFC models from the Hawk server.","title":"IFCExport"},{"location":"server/api/#ifcexportexportasstep","text":"Export part of a Hawk index in IFC STEP format. Returns IFCExportJob . Takes these parameters: Name Type Documentation hawkInstance string options IFCExportOptions","title":"IFCExport.exportAsSTEP"},{"location":"server/api/#ifcexportgetjobs","text":"List all the previously scheduled IFC export jobs. Returns list<IFCExportJob> . Does not take any parameters.","title":"IFCExport.getJobs"},{"location":"server/api/#ifcexportgetjobstatus","text":"Retrieve the current status of the job with the specified ID. Returns IFCExportJob . Takes these parameters: Name Type Documentation jobID string","title":"IFCExport.getJobStatus"},{"location":"server/api/#ifcexportkilljob","text":"Cancel the job with the specified ID. Returns bool . Takes these parameters: Name Type Documentation jobID string","title":"IFCExport.killJob"},{"location":"server/api/#users","text":"The majority of service operations provided by the server require user authentication (indicated in the top-left cell of each operation table) to prevent unaccountable use. As such, the platform needs to provide basic user management service operations for creating, updating and deleting user accounts. When handling passwords, only SSL should be used, as otherwise they could be intercepted.","title":"Users"},{"location":"server/api/#userscreateuser","text":"Creates a new platform user. Returns void . Takes these parameters: Name Type Documentation username string A unique identifier for the user. password string The desired password. profile UserProfile The profile of the user. May throw these exceptions: Name Documentation UserExists The specified username already exists.","title":"Users.createUser"},{"location":"server/api/#usersupdateprofile","text":"Updates the profile of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. profile UserProfile The updated profile of the user. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.updateProfile"},{"location":"server/api/#usersupdatepassword","text":"Updates the password of a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to update the profile of. newPassword string New password to be set. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.updatePassword"},{"location":"server/api/#usersdeleteuser","text":"Deletes a platform user. Returns void . Takes these parameters: Name Type Documentation username string The name of the user to delete. May throw these exceptions: Name Documentation UserNotFound The specified username does not exist.","title":"Users.deleteUser"},{"location":"server/api/#entities","text":"","title":"Entities"},{"location":"server/api/#attributeslot","text":"Represents a slot that can store the value(s) of an attribute of a model element. Inherits from: Slot. Name Type Documentation name (inherited) string The name of the model element property the value of which is stored in this slot. value (optional) SlotValue Value of the slot (if set). Used in: ModelElement.","title":"AttributeSlot"},{"location":"server/api/#commititem","text":"Simplified entry within a commit of a repository. Name Type Documentation path string Path within the repository, using / as separator. repoURL string URL of the repository. revision string Unique identifier of the revision of the repository. type CommitItemChangeType Type of change within the commit. Used in: HawkModelElementAdditionEvent, HawkModelElementRemovalEvent, HawkAttributeUpdateEvent, HawkAttributeRemovalEvent, HawkReferenceAdditionEvent, HawkReferenceRemovalEvent, HawkFileAdditionEvent, HawkFileRemovalEvent.","title":"CommitItem"},{"location":"server/api/#containerslot","text":"Represents a slot that can store other model elements within a model element. Inherits from: Slot. Name Type Documentation elements list Contained elements for this slot. name (inherited) string The name of the model element property the value of which is stored in this slot. Used in: ModelElement.","title":"ContainerSlot"},{"location":"server/api/#credentials","text":"Credentials of the client in the target VCS. Name Type Documentation password string Password for logging into the VCS. username string Username for logging into the VCS. Used in: Hawk.addRepository, Hawk.updateRepositoryCredentials.","title":"Credentials"},{"location":"server/api/#derivedattributespec","text":"Used to configure Hawk's derived attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the derived attribute. attributeType (optional) string The (primitive) type of the derived attribute. derivationLanguage (optional) string The language used to express the derivation logic. derivationLogic (optional) string An executable expression of the derivation logic in the language above. isMany (optional) bool The multiplicity of the derived attribute. isOrdered (optional) bool A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true). isUnique (optional) bool A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true). metamodelUri string The URI of the metamodel to which the derived attribute belongs. typeName string The name of the type to which the derived attribute belongs. Used in: Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes.","title":"DerivedAttributeSpec"},{"location":"server/api/#effectivemetamodel","text":"Representation of a set of rules for either including or excluding certain types and/or slots within a metamodel. Name Type Documentation slots set Slots within the type that should be included or excluded: empty means 'all slots'. type string Type that should be included or excluded. Used in: EffectiveMetamodelMap.","title":"EffectiveMetamodel"},{"location":"server/api/#effectivemetamodelmap","text":"Representation of a set of rules for either including or excluding metamodels, types or slots. Name Type Documentation metamodel map > Types and slots within the metamodel that should be included or excluded: empty means 'all types and slots'. uri string Namespace URI of the metamodel. Used in: HawkQueryOptions, IFCExportOptions.","title":"EffectiveMetamodelMap"},{"location":"server/api/#file","text":"A file to be sent through the network. Name Type Documentation contents binary Sequence of bytes with the contents of the file. name string Name of the file. Used in: Hawk.registerMetamodels.","title":"File"},{"location":"server/api/#hawkattributeremovalevent","text":"Serialized form of an attribute removal event. Name Type Documentation attribute string Name of the attribute that was removed. id string Identifier of the model element that was changed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkAttributeRemovalEvent"},{"location":"server/api/#hawkattributeupdateevent","text":"Serialized form of an attribute update event. Name Type Documentation attribute string Name of the attribute that was changed. id string Identifier of the model element that was changed. value SlotValue New value for the attribute. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkAttributeUpdateEvent"},{"location":"server/api/#hawkchangeevent","text":"Serialized form of a change in the indexed models of a Hawk instance. Name Type Documentation fileAddition HawkFileAdditionEvent A file was added. fileRemoval HawkFileRemovalEvent A file was removed. modelElementAddition HawkModelElementAdditionEvent A model element was added. modelElementAttributeRemoval HawkAttributeRemovalEvent An attribute was removed. modelElementAttributeUpdate HawkAttributeUpdateEvent An attribute was updated. modelElementRemoval HawkModelElementRemovalEvent A model element was removed. referenceAddition HawkReferenceAdditionEvent A reference was added. referenceRemoval HawkReferenceRemovalEvent A reference was removed. syncEnd HawkSynchronizationEndEvent Synchronization ended. syncStart HawkSynchronizationStartEvent Synchronization started.","title":"HawkChangeEvent"},{"location":"server/api/#hawkfileadditionevent","text":"Serialized form of a file addition event. Name Type Documentation vcsItem CommitItem Reference to file that was added, including VCS metadata. Used in: HawkChangeEvent.","title":"HawkFileAdditionEvent"},{"location":"server/api/#hawkfileremovalevent","text":"A file was removed. Name Type Documentation vcsItem CommitItem Reference to file that was removed, including VCS metadata. Used in: HawkChangeEvent.","title":"HawkFileRemovalEvent"},{"location":"server/api/#hawkinstance","text":"Status of a Hawk instance. Name Type Documentation message string Last info message from the instance. name string The name of the instance. state HawkState Current state of the instance. Used in: Hawk.listInstances.","title":"HawkInstance"},{"location":"server/api/#hawkmodelelementadditionevent","text":"Serialized form of a model element addition event. Name Type Documentation id string Identifier of the model element that was added. metamodelURI string Metamodel URI of the type of the model element. typeName string Name of the type of the model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkModelElementAdditionEvent"},{"location":"server/api/#hawkmodelelementremovalevent","text":"Serialized form of a model element removal event. Name Type Documentation id string Identifier of the model element that was removed. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkModelElementRemovalEvent"},{"location":"server/api/#hawkqueryoptions","text":"Options for a Hawk query. Name Type Documentation defaultNamespaces (optional) string The default namespaces to be used to resolve ambiguous unqualified types. effectiveMetamodelExcludes (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. effectiveMetamodelIncludes (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeAttributes (optional) bool Whether to include attributes (true) or not (false) in model element results. includeContained (optional) bool Whether to include all the child elements of the model element results (true) or not (false). includeDerived (optional) bool Whether to include derived attributes (true) or not (false) in model element results. includeNodeIDs (optional) bool Whether to include node IDs (true) or not (false) in model element results. includeReferences (optional) bool Whether to include references (true) or not (false) in model element results. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: Hawk.query, Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements.","title":"HawkQueryOptions"},{"location":"server/api/#hawkreferenceadditionevent","text":"Serialized form of a reference addition event. Name Type Documentation refName string Name of the reference that was added. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkReferenceAdditionEvent"},{"location":"server/api/#hawkreferenceremovalevent","text":"Serialized form of a reference removal event. Name Type Documentation refName string Name of the reference that was removed. sourceId string Identifier of the source model element. targetId string Identifier of the target model element. vcsItem CommitItem Entry within the commit that produced the changes. Used in: HawkChangeEvent.","title":"HawkReferenceRemovalEvent"},{"location":"server/api/#hawkstateevent","text":"Serialized form of a change in the state of a Hawk instance. Name Type Documentation message string Short message about the current status of the server. state HawkState State of the Hawk instance. timestamp i64 Timestamp for this state change.","title":"HawkStateEvent"},{"location":"server/api/#hawksynchronizationendevent","text":"Serialized form of a sync end event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent.","title":"HawkSynchronizationEndEvent"},{"location":"server/api/#hawksynchronizationstartevent","text":"Serialized form of a sync start event. Name Type Documentation timestampNanos i64 Local timestamp, measured in nanoseconds. Only meant to be used to compute synchronization cost. Used in: HawkChangeEvent.","title":"HawkSynchronizationStartEvent"},{"location":"server/api/#ifcexportjob","text":"Information about a server-side IFC export job. Name Type Documentation jobID string message string status IFCExportStatus Used in: IFCExport.exportAsSTEP, IFCExport.getJobs, IFCExport.getJobStatus.","title":"IFCExportJob"},{"location":"server/api/#ifcexportoptions","text":"Options for a server-side IFC export. Name Type Documentation excludeRules (optional) map >> If set and not empty, the mentioned metamodels, types and features will not be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. filePatterns (optional) list The file patterns for the query (e.g. *.uml). includeRules (optional) map >> If set and not empty, only the specified metamodels, types and features will be fetched. Otherwise, everything that is not excluded will be fetched. The string '*' can be used to refer to all types within a metamodel or all fields within a type. repositoryPattern (optional) string The repository for the query (or * for all repositories). Used in: IFCExport.exportAsSTEP.","title":"IFCExportOptions"},{"location":"server/api/#indexedattributespec","text":"Used to configure Hawk's indexed attributes (discussed in D5.3). Name Type Documentation attributeName string The name of the indexed attribute. metamodelUri string The URI of the metamodel to which the indexed attribute belongs. typeName string The name of the type to which the indexed attribute belongs. Used in: Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes.","title":"IndexedAttributeSpec"},{"location":"server/api/#invalidmodelspec","text":"The model specification is not valid: the model or the metamodels are inaccessible or invalid. Name Type Documentation reason string Reason for the spec not being valid. spec ModelSpec A copy of the invalid model specification.","title":"InvalidModelSpec"},{"location":"server/api/#invalidtransformation","text":"The transformation is not valid: it is unparsable or inconsistent. Name Type Documentation location string Location of the problem, if applicable. Usually a combination of line and column numbers. reason string Reason for the transformation not being valid.","title":"InvalidTransformation"},{"location":"server/api/#mixedreference","text":"Represents a reference to a model element: it can be an identifier or a position. Only used when the same ReferenceSlot has both identifier-based and position-based references. This may be the case if we are retrieving a subset of the model which has references between its elements and with elements outside the subset at the same time. Name Type Documentation id string Identifier-based reference to a model element. position i32 Position-based reference to a model element. Used in: ReferenceSlot.","title":"MixedReference"},{"location":"server/api/#modelelement","text":"Represents a model element. Name Type Documentation attributes (optional) list Slots holding the values of the model element's attributes, if any have been set. containers (optional) list Slots holding contained model elements, if any have been set. file (optional) string Name of the file to which the element belongs (not set if equal to that of the previous model element). id (optional) string Unique ID of the model element (not set if using position-based references). metamodelUri (optional) string URI of the metamodel to which the type of the element belongs (not set if equal to that of the previous model element). references (optional) list Slots holding the values of the model element's references, if any have been set. repositoryURL (optional) string URI of the repository to which the element belongs (not set if equal to that of the previous model element). typeName (optional) string Name of the type that the model element is an instance of (not set if equal to that of the previous model element). Used in: Hawk.resolveProxies, Hawk.getModel, Hawk.getRootElements, ContainerSlot, QueryResult.","title":"ModelElement"},{"location":"server/api/#modelelementtype","text":"Represents a type of model element. Name Type Documentation attributes (optional) list Metadata for the attribute slots. id string Unique ID of the model element type. metamodelUri string URI of the metamodel to which the type belongs. references (optional) list Metadata for the reference slots. typeName string Name of the type. Used in: QueryResult.","title":"ModelElementType"},{"location":"server/api/#modelspec","text":"Captures information about source/target models of ATL transformations. Name Type Documentation metamodelUris list The URIs of the metamodels to which elements of the model conform. uri string The URI from which the model will be loaded or to which it will be persisted. Used in: InvalidModelSpec.","title":"ModelSpec"},{"location":"server/api/#queryresult","text":"Union type for a scalar value, a reference to a model element, a heterogeneous list or a string/value map. Query results may return all types of results, so we need to stay flexible. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vByte (inherited) byte 8-bit signed integer value. vDouble (inherited) double 64-bit floating point value. vInteger (inherited) i32 32-bit signed integer value. vList list Nested list of query results. vLong (inherited) i64 64-bit signed integer value. vMap map Map between query results. vModelElement ModelElement Encoded model element. vModelElementType ModelElementType Encoded model element type. vShort (inherited) i16 16-bit signed integer value. vString (inherited) string Sequence of UTF8 characters. Used in: Hawk.query, QueryResult, QueryResultMap.","title":"QueryResult"},{"location":"server/api/#queryresultmap","text":"Name Type Documentation name string value QueryResult Used in: QueryResult.","title":"QueryResultMap"},{"location":"server/api/#referenceslot","text":"Represents a slot that can store the value(s) of a reference of a model element. References can be expressed as positions within a result tree (using pre-order traversal) or IDs. id, ids, position, positions and mixed are all mutually exclusive. At least one position or one ID must be given. Inherits from: Slot. Name Type Documentation id (optional) string Unique identifier of the referenced element (if there is only one ID based reference in this slot). ids (optional) list Unique identifiers of the referenced elements (if more than one). mixed (optional) list Mix of identifier- and position-bsaed references (if there is at least one position and one ID). name (inherited) string The name of the model element property the value of which is stored in this slot. position (optional) i32 Position of the referenced element (if there is only one position-based reference in this slot). positions (optional) list Positions of the referenced elements (if more than one). Used in: ModelElement.","title":"ReferenceSlot"},{"location":"server/api/#repository","text":"Entity that represents a model repository. Name Type Documentation isFrozen (optional) bool True if the repository is frozen, false otherwise. type string The type of repository. uri string The URI to the repository. Used in: Hawk.addRepository, Hawk.listRepositories.","title":"Repository"},{"location":"server/api/#slot","text":"Represents a slot that can store the value(s) of a property of a model element. Inherited by: AttributeSlot, ReferenceSlot, ContainerSlot. Name Type Documentation name string The name of the model element property the value of which is stored in this slot.","title":"Slot"},{"location":"server/api/#slotmetadata","text":"Represents the metadata of a slot in a model element type. Name Type Documentation isMany bool True if this slot holds a collection of values instead of a single value. isOrdered bool True if the values in this slot are ordered. isUnique bool True if the value of this slot must be unique within its containing model. name string The name of the model element property that is stored in this slot. type string The type of the values in this slot. Used in: ModelElementType.","title":"SlotMetadata"},{"location":"server/api/#slotvalue","text":"Union type for a single scalar value or a homogeneous collection of scalar values. Inherits from: Value. Name Type Documentation vBoolean (inherited) bool Boolean (true/false) value. vBooleans list List of true/false values. vByte (inherited) byte 8-bit signed integer value. vBytes binary List of 8-bit signed integers. vDouble (inherited) double 64-bit floating point value. vDoubles list List of 64-bit floating point values. vInteger (inherited) i32 32-bit signed integer value. vIntegers list List of 32-bit signed integers. vLong (inherited) i64 64-bit signed integer value. vLongs list List of 64-bit signed integers. vShort (inherited) i16 16-bit signed integer value. vShorts list List of 16-bit signed integers. vString (inherited) string Sequence of UTF8 characters. vStrings list List of sequences of UTF8 characters. Used in: HawkAttributeUpdateEvent, AttributeSlot.","title":"SlotValue"},{"location":"server/api/#subscription","text":"Details about a subscription to a topic queue. Name Type Documentation host string Host name of the message queue server. port i32 Port in which the message queue server is listening. queueAddress string Address of the topic queue. queueName string Name of the topic queue. sslRequired bool Whether SSL is required or not. Used in: Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"Subscription"},{"location":"server/api/#userprofile","text":"Minimal details about registered users. Name Type Documentation admin bool Whether the user has admin rights (i.e. so that they can create new users, change the status of admin users etc). realName string The real name of the user. Used in: Users.createUser, Users.updateProfile.","title":"UserProfile"},{"location":"server/api/#value","text":"Union type for a single scalar value. Inherited by: QueryResult, SlotValue. Name Type Documentation vBoolean bool Boolean (true/false) value. vByte byte 8-bit signed integer value. vDouble double 64-bit floating point value. vInteger i32 32-bit signed integer value. vLong i64 64-bit signed integer value. vShort i16 16-bit signed integer value. vString string Sequence of UTF8 characters.","title":"Value"},{"location":"server/api/#enumerations","text":"","title":"Enumerations"},{"location":"server/api/#commititemchangetype","text":"Type of change within a commit. Name Documentation ADDED File was added. DELETED File was removed. REPLACED File was removed. UNKNOWN Unknown type of change. UPDATED File was updated.","title":"CommitItemChangeType"},{"location":"server/api/#hawkstate","text":"One of the states that a Hawk instance can be in. Name Documentation RUNNING The instance is running and monitoring the indexed locations. STOPPED The instance is stopped and is not monitoring any indexed locations. UPDATING The instance is updating its contents from the indexed locations.","title":"HawkState"},{"location":"server/api/#ifcexportstatus","text":"Status of a server-side IFC export job. Name Documentation CANCELLED The job has been cancelled. DONE The job is completed. FAILED The job has failed. RUNNING The job is currently running. SCHEDULED The job has been scheduled but has not started yet.","title":"IFCExportStatus"},{"location":"server/api/#subscriptiondurability","text":"Durability of a subscription. Name Documentation DEFAULT Subscription survives client disconnections but not server restarts. DURABLE Subscription survives client disconnections and server restarts. TEMPORARY Subscription removed after disconnecting. ## Exceptions","title":"SubscriptionDurability"},{"location":"server/api/#failedquery","text":"The specified query failed to complete its execution. Name Type Documentation reason string Reason for the query failing to complete its execution. Used in: Hawk.query.","title":"FailedQuery"},{"location":"server/api/#hawkinstancenotfound","text":"No Hawk instance exists with that name. No fields for this entity. Used in: Hawk.removeInstance, Hawk.startInstance, Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"HawkInstanceNotFound"},{"location":"server/api/#hawkinstancenotrunning","text":"The selected Hawk instance is not running. No fields for this entity. Used in: Hawk.stopInstance, Hawk.syncInstance, Hawk.registerMetamodels, Hawk.unregisterMetamodels, Hawk.listMetamodels, Hawk.query, Hawk.resolveProxies, Hawk.addRepository, Hawk.isFrozen, Hawk.setFrozen, Hawk.removeRepository, Hawk.updateRepositoryCredentials, Hawk.listRepositories, Hawk.listFiles, Hawk.configurePolling, Hawk.addDerivedAttribute, Hawk.removeDerivedAttribute, Hawk.listDerivedAttributes, Hawk.addIndexedAttribute, Hawk.removeIndexedAttribute, Hawk.listIndexedAttributes, Hawk.getModel, Hawk.watchStateChanges, Hawk.watchModelChanges.","title":"HawkInstanceNotRunning"},{"location":"server/api/#invalidderivedattributespec","text":"The derived attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addDerivedAttribute.","title":"InvalidDerivedAttributeSpec"},{"location":"server/api/#invalidindexedattributespec","text":"The indexed attribute specification is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.addIndexedAttribute.","title":"InvalidIndexedAttributeSpec"},{"location":"server/api/#invalidmetamodel","text":"The provided metamodel is not valid (e.g. unparsable or inconsistent). Name Type Documentation reason string Reason for the metamodel not being valid. Used in: Hawk.registerMetamodels.","title":"InvalidMetamodel"},{"location":"server/api/#invalidpollingconfiguration","text":"The polling configuration is not valid. Name Type Documentation reason string Reason for the spec not being valid. Used in: Hawk.configurePolling.","title":"InvalidPollingConfiguration"},{"location":"server/api/#invalidquery","text":"The specified query is not valid. Name Type Documentation reason string Reason for the query not being valid. Used in: Hawk.query.","title":"InvalidQuery"},{"location":"server/api/#unknownquerylanguage","text":"The specified query language is not supported by the operation. No fields for this entity. Used in: Hawk.query.","title":"UnknownQueryLanguage"},{"location":"server/api/#unknownrepositorytype","text":"The specified repository type is not supported by the operation. No fields for this entity. Used in: Hawk.addRepository.","title":"UnknownRepositoryType"},{"location":"server/api/#userexists","text":"The specified username already exists. No fields for this entity. Used in: Users.createUser.","title":"UserExists"},{"location":"server/api/#usernotfound","text":"The specified username does not exist. No fields for this entity. Used in: Users.updateProfile, Users.updatePassword, Users.deleteUser.","title":"UserNotFound"},{"location":"server/api/#vcsauthenticationfailed","text":"The client failed to prove its identity in the VCS. No fields for this entity. Used in: Hawk.addRepository. This file was automatically generated by Ecore2Thrift. https://github.com/bluezio/ecore2thrift","title":"VCSAuthenticationFailed"},{"location":"server/architecture/","text":"If an entire team is querying the same set of models, indexing them from a central location is more efficient than maintaining multiple indexes. In other cases, we may want to query models from outside Eclipse and even from applications written in other languages (e.g. C++ or Python). To support these use cases, Hawk includes a server that exposes its functionality through a set of Thrift APIs. This server product is a headless Eclipse application that can be run from the command line. The general structure is as shown here: The server component is implemented as an Eclipse application, based on the Eclipse Equinox OSGi runtime. Using Eclipse Equinox for the server allows for integrating the Eclipse-based tools with very few changes in their code, while reducing the chances of mutual interference. The OSGi class loading mechanisms ensure that each plugin only \"sees\" the classes that it declares as dependencies, avoiding common clashes such as requiring different versions of the same Java library or overriding a configuration file with an unexpected copy from another library. To mitigate the risk of connectivity problems due to enterprise firewalls, the server uses for most of the API the standard HTTP and HTTPS protocols (by default, on the unprivileged ports 8080 and 8443) and secures them through Apache Shiro . Optionally, the Hawk API can be exposed through raw TCP on port 2080, for increased performance: however, security-conscious environments should leave it disabled as it does not support authentication. The embedded Apache Artemis messaging queue required for remote change notifications in Hawk requires its own port, as it manages its own network connections. By default, this is port 61616. These notifications are made available through two protocols: Artemis Core (a lightweight replacement for the Java Message Service, for Java clients) and STOMP over WebSockets (a cross-language messaging protocol, for web-based clients). The server includes plugins that use the standard OSGi HttpService facilities to register servlets and filters. Each service is implemented as one or more of these servlets. The currently implemented endpoints are these: Path within server Service Thrift protocol /thrift/hawk/binary Hawk Binary /thrift/hawk/compact Hawk Compact /thrift/hawk/json Hawk JSON /thrift/hawk/tuple Hawk Tuple /thrift/users Users JSON All services provide a JSON endpoint, since it is compatible across all languages supported by Thrift and works well with web-based clients. However, since Hawk is performance sensitive (as we might need to encode a large number of model elements in the results of a query), it also provides endpoints with the other Thrift protocols. Binary is the most portable after JSON, and Tuple is the most efficient but is only usable from Java clients. Having all four protocols allows Hawk clients to pick the most efficient protocol that is available for their language. The available operations for the Users and Hawk APIs are listed in Thrift API . For details about the optional access control to these APIs, check Thrift API security .","title":"Architecture"},{"location":"server/cli/","text":"You can talk to a Hawk server from one of the console client products in the latest release . Using the product only requires unpacking the product and running the main executable within it. Alternatively, you could install the \"Hawk CLI Feature\" into your Eclipse instance and use these commands from the \"Host OSGi Console\" in the Console view. Each Thrift API has its own set of commands. Hawk \u00b6 You can use the hawkHelp command to list all the available commands. Connecting to Hawk \u00b6 Name Description hawkConnect \\<url> [username] [password] Connects to a Thrift endpoint (guesses the protocol from the URL) hawkDisconnect Disconnects from the current Thrift endpoint Managing Hawk indexer instances \u00b6 Name Description hawkAddInstance \\<name> \\<backend> [minDelay] [maxDelay|0] Adds an instance with the provided name (if maxDelay = 0, periodic updates are disabled) hawkListBackends Lists the available Hawk backends hawkListInstances Lists the available Hawk instances hawkRemoveInstance \\<name> Removes an instance with the provided name, if it exists hawkSelectInstance \\<name> Selects the instance with the provided name hawkStartInstance \\<name> Starts the instance with the provided name hawkStopInstance \\<name> Stops the instance with the provided name hawkSyncInstance \\<name> [waitForSync:true|false] Requests an immediate sync on the instance with the provided name Managing metamodels \u00b6 Name Description hawkListMetamodels Lists all registered metamodels in this instance hawkRegisterMetamodel \\<files...> Registers one or more metamodels hawkUnregisterMetamodel \\<uri> Unregisters the metamodel with the specified URI Managing version control repositories \u00b6 Name Description hawkAddRepository \\<url> \\<type> [user] [pwd] Adds a repository hawkListFiles \\<url> [filepatterns...] Lists files within a repository hawkListRepositories Lists all registered metamodels in this instance hawkListRepositoryTypes Lists available repository types hawkRemoveRepository \\<url> Removes the repository with the specified URL hawkUpdateRepositoryCredentials \\<url> \\<user> \\<pwd> Changes the user/password used to monitor a repository Querying models \u00b6 Name Description hawkGetModel \\<repo> [filepatterns...] Returns all the model elements of the specified files within the repo hawkGetRoots \\<repo> [filepatterns...] Returns only the root model elements of the specified files within the repo hawkListQueryLanguages Lists all available query languages hawkQuery \\<query> \\<language> [repo] [files] Queries the index hawkResolveProxies \\<ids...> Retrieves model elements by ID Managing derived attributes \u00b6 Name Description hawkAddDerivedAttribute \\<mmURI> \\<mmType> \\<name> \\<type> \\<lang> \\<expr> [many|ordered|unique]* Adds a derived attribute hawkListDerivedAttributes Lists all available derived attributes hawkRemoveDerivedAttribute \\<mmURI> \\<mmType> \\<name> Removes a derived attribute, if it exists Managing indexed attributes \u00b6 Name Description hawkAddIndexedAttribute \\<mmURI> \\<mmType> \\<name> Adds an indexed attribute hawkListIndexedAttributes Lists all available indexed attributes hawkRemoveIndexedAttribute \\<mmURI> \\<mmType> \\<name> Removes an indexed attribute, if it exists Watching over changes in remote models \u00b6 Name Description hawkWatchModelChanges [default|temporary|durable] [client ID] [repo] [files...] Watches an Artemis message queue with detected model changes Users \u00b6 The Users API has its own set of commands, which can be listed through usersHelp : Name Description usersHelp Lists all the available commands for Users usersConnect \\<url> [username] [password] Connects to a Thrift endpoint usersDisconnect Disconnects from the current Thrift endpoint usersAdd \\<username> \\<realname> \\<isAdmin: true|false> [password] Adds the user to the database usersUpdateProfile \\<username> \\<realname> \\<isAdmin: true|false> Changes the personal information of a user usersUpdatePassword \\<username> [password] Changes the password of a user usersRemove \\<username> Removes a user usersCheck \\<username> [password] Validates credentials","title":"Console client"},{"location":"server/cli/#hawk","text":"You can use the hawkHelp command to list all the available commands.","title":"Hawk"},{"location":"server/cli/#connecting-to-hawk","text":"Name Description hawkConnect \\<url> [username] [password] Connects to a Thrift endpoint (guesses the protocol from the URL) hawkDisconnect Disconnects from the current Thrift endpoint","title":"Connecting to Hawk"},{"location":"server/cli/#managing-hawk-indexer-instances","text":"Name Description hawkAddInstance \\<name> \\<backend> [minDelay] [maxDelay|0] Adds an instance with the provided name (if maxDelay = 0, periodic updates are disabled) hawkListBackends Lists the available Hawk backends hawkListInstances Lists the available Hawk instances hawkRemoveInstance \\<name> Removes an instance with the provided name, if it exists hawkSelectInstance \\<name> Selects the instance with the provided name hawkStartInstance \\<name> Starts the instance with the provided name hawkStopInstance \\<name> Stops the instance with the provided name hawkSyncInstance \\<name> [waitForSync:true|false] Requests an immediate sync on the instance with the provided name","title":"Managing Hawk indexer instances"},{"location":"server/cli/#managing-metamodels","text":"Name Description hawkListMetamodels Lists all registered metamodels in this instance hawkRegisterMetamodel \\<files...> Registers one or more metamodels hawkUnregisterMetamodel \\<uri> Unregisters the metamodel with the specified URI","title":"Managing metamodels"},{"location":"server/cli/#managing-version-control-repositories","text":"Name Description hawkAddRepository \\<url> \\<type> [user] [pwd] Adds a repository hawkListFiles \\<url> [filepatterns...] Lists files within a repository hawkListRepositories Lists all registered metamodels in this instance hawkListRepositoryTypes Lists available repository types hawkRemoveRepository \\<url> Removes the repository with the specified URL hawkUpdateRepositoryCredentials \\<url> \\<user> \\<pwd> Changes the user/password used to monitor a repository","title":"Managing version control repositories"},{"location":"server/cli/#querying-models","text":"Name Description hawkGetModel \\<repo> [filepatterns...] Returns all the model elements of the specified files within the repo hawkGetRoots \\<repo> [filepatterns...] Returns only the root model elements of the specified files within the repo hawkListQueryLanguages Lists all available query languages hawkQuery \\<query> \\<language> [repo] [files] Queries the index hawkResolveProxies \\<ids...> Retrieves model elements by ID","title":"Querying models"},{"location":"server/cli/#managing-derived-attributes","text":"Name Description hawkAddDerivedAttribute \\<mmURI> \\<mmType> \\<name> \\<type> \\<lang> \\<expr> [many|ordered|unique]* Adds a derived attribute hawkListDerivedAttributes Lists all available derived attributes hawkRemoveDerivedAttribute \\<mmURI> \\<mmType> \\<name> Removes a derived attribute, if it exists","title":"Managing derived attributes"},{"location":"server/cli/#managing-indexed-attributes","text":"Name Description hawkAddIndexedAttribute \\<mmURI> \\<mmType> \\<name> Adds an indexed attribute hawkListIndexedAttributes Lists all available indexed attributes hawkRemoveIndexedAttribute \\<mmURI> \\<mmType> \\<name> Removes an indexed attribute, if it exists","title":"Managing indexed attributes"},{"location":"server/cli/#watching-over-changes-in-remote-models","text":"Name Description hawkWatchModelChanges [default|temporary|durable] [client ID] [repo] [files...] Watches an Artemis message queue with detected model changes","title":"Watching over changes in remote models"},{"location":"server/cli/#users","text":"The Users API has its own set of commands, which can be listed through usersHelp : Name Description usersHelp Lists all the available commands for Users usersConnect \\<url> [username] [password] Connects to a Thrift endpoint usersDisconnect Disconnects from the current Thrift endpoint usersAdd \\<username> \\<realname> \\<isAdmin: true|false> [password] Adds the user to the database usersUpdateProfile \\<username> \\<realname> \\<isAdmin: true|false> Changes the personal information of a user usersUpdatePassword \\<username> [password] Changes the password of a user usersRemove \\<username> Removes a user usersCheck \\<username> [password] Validates credentials","title":"Users"},{"location":"server/deployment/","text":"Initial setup \u00b6 To run the Hawk server, download the latest hawk-server-*.zip file for your operating system and architecture of choice from the \"Releases\" section on Github , and unpack it. Note that -nogpl- releases do not include GPL-licensed components: if you want them in your server, you will have to build it yourself. Make any relevant changes to the mondo-server.ini file, and then run the run-server.sh script from Linux, or simply the provided mondo-server binary from Mac or Windows. If everything goes well, you should see this message: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. osgi> You may now use the Thrift APIs as normal. If you need to make any tweaks, continue reading! .ini options \u00b6 You will notice that the .ini file has quite a few different options defined, in addition to the JVM options defined with -vmargs . We will analyze them in this section. -console allows us to use the OSGi console to manage Hawk instances. -consoleLog plugs Eclipse logging into the console, for following what is going with the server. -Dartemis.security.enabled=false disables the Shiro security realm for the embedded Artemis server. Production environments should set this to true . -Dhawk.artemis.host=localhost has Artemis listening only on 127.0.0.1. You should change this to the IP address or hostname of the network interface that you want Artemis to listen on. -Dhawk.artemis.listenAll=false prevents Artemis from listening on all addresses. You can set this to true and ignore hawk.artemis.host . -Dhawk.artemis.sslEnabled=false disables HTTPS on Artemis. If you enable SSL, you will need to check the \"Enabling HTTPS\" section further below! -Dhawk.tcp.port=2080 enables the TCP server for only the Hawk API, and not the Users management one. This API is unsecured, so do this at your own risk. For production environments, you should remove this line. -Dhawk.tcp.thriftProtocol=TUPLE changes the Thrift protocol (encoding) that should be used for the TCP endpoint. -Dorg.eclipse.equinox.http.jetty.customizer.class=org.hawk.service.server.gzip.Customizer is needed for the * -Dorg.osgi.service.http.port=8080 sets the HTTP port for the APIs to 8080. -Dorg.osgi.service.http.port.secure=8443 sets the HTTPS port for the APIs to 8443. -Dosgi.noShutdown=true is needed for the server to stay running. -Dsvnkit.library.gnome-keyring.enabled=false is required to work around a bug in the integration of the GNOME keyring in recent Eclipse releases. -eclipse.keyring and -eclipse.password are the paths to the keyring and keyring password files which store the VCS credentials Hawk needs to access password-protected SVN repositories. (For Git repositories, you are assumed to keep your own clone and do any periodic pulling yourself.) -XX:+UseG1GC (part of -vmargs ) improves garbage collection in OrientDB and Neo4j. -XX:+UseStringDeduplication (part of -vmargs as well) noticeably reduces memory use in OrientDB. Concerns for production environments \u00b6 One important detail for production environments is turning on security. This is disabled by default to help with testing and initial evaluations, but it can be enabled by running the server once, shutting it down and then editing the shiro.ini file appropriately (relevant sections include comments on what to do) and switching artemis.security.enabled to true in the mondo-server.ini file. The MONDO server uses an embedded MapDB database, which is managed through the Users [[Thrift API]]. Once security is enabled, all Thrift APIs and all external (not in-VM) Artemis connections become password-protected. If you enable security, you will want to ensure that -Dhawk.tcp.port is not present in the mondo-server.ini file, since the Hawk TCP port does not support security for the sake of raw performance. If you are deploying this across a network, you will need to edit the mondo-server.ini file and customize the hawk.artemis.host line to the host that you want the Artemis server to listen to. This should be the IP address or hostname of the MONDO server in the network, normally. The Thrift API uses this hostname as well in its replies to the watchModelChanges operation in the Hawk API. Additionally, if the server IP is dynamic but has a consistent DNS name (e.g. an Amazon VM + a dynamic DNS provider), we recommend setting hawk.artemis.listenAll to true (so the Artemis server will keep listening on all interfaces, even if the IP address changes) and using the DNS name for hawk.artemis.host instead of a literal IP address. Finally, production environments should enable and enforce SSL as well, since plain HTTP is insecure. The Linux products include a shell script that generates simple self-signed key/trust stores and indicates which Java system properties should be set on the server and the client. Secure storage of VCS credentials \u00b6 The server hosts a copy of the Hawk model indexer, which may need to access remote Git and Subversion repositories. To access password-protected repositories, the server will need to store the proper credentials in a secure way that will not expose them to other users in the same machine. To achieve this goal, the MONDO server uses the Eclipse secure storage facilities to save the password in an encrypted form. Users need to prepare the secure storage by following these two steps: The secure store must be placed in a place no other program will try to access concurrently. This can be done by editing the mondo-server.ini server configuration file and adding this: -eclipse.keyring /path/to/keyringfile That path should be only readable by the user running the server, for added security. An encryption password must be set. For Windows and Mac, the available OS integration should be enough. For Linux environments, two lines have to be added at the beginning of the mondo-server.ini file, specifying the path to a password file with: -eclipse.password /path/to/passwordfile. On Linux, creating a password file from 100 bytes of random data that is only readable by the current user can be done with these commands: $ head -c 100 /dev/random | base64 > /path/to/password $ chmod 400 /path/to/password The server tests on startup that the secure store has been set properly, warning users if encryption is not available and urging them to revise their setup. Setting up SSL certificates for the server \u00b6 SSL is handled through standard Java keystore ( .jks ) files. To produce a keystore with some self-signed certificates, you could use the generate-ssl-certs.sh script included in the Linux distribution, or run these commands from other operating systems (replace CN, OU and so forth with the appropriate values): keytool -genkey -keystore mondo-server-keystore.jks -storepass secureexample -keypass secureexample -dname \"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ\" -keyalg RSA keytool -export -keystore mondo-server-keystore.jks -file mondo-jks.cer -storepass secureexample keytool -import -keystore mondo-client-truststore.jks -file mondo-jks.cer -storepass secureexample -keypass secureexample -noprompt Once you have your .jks, on the client .ini you'll need to set: -Djavax.net.ssl.trustStore=path/to/client-truststore.jks -Djavax.net.ssl.trustStorePassword=secureexample On the server .ini, you'll need to enable SSL and tell Jetty and Artemis about your KeyStore: -Dorg.eclipse.equinox.http.jetty.https.enabled=true -Dhawk.artemis.sslEnabled=true -Dorg.eclipse.equinox.http.jetty.ssl.keystore=path/to/server-keystore.jks -Djavax.net.ssl.keyStore=path/to/server-keystore.jks You'll be prompted for the key store password three times: two by Jetty and once by the Artemis server. If you don't want these prompts, you could use these properties, but using them is UNSAFE , as another user in the same machine could retrieve these passwords from your process manager: -Djavax.net.ssl.keyStorePassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.keypassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.password=secureexample","title":"Deployment"},{"location":"server/deployment/#initial-setup","text":"To run the Hawk server, download the latest hawk-server-*.zip file for your operating system and architecture of choice from the \"Releases\" section on Github , and unpack it. Note that -nogpl- releases do not include GPL-licensed components: if you want them in your server, you will have to build it yourself. Make any relevant changes to the mondo-server.ini file, and then run the run-server.sh script from Linux, or simply the provided mondo-server binary from Mac or Windows. If everything goes well, you should see this message: Welcome to the Hawk Server! List available commands with 'hserverHelp'. Stop the server with 'shutdown' and then 'close'. osgi> You may now use the Thrift APIs as normal. If you need to make any tweaks, continue reading!","title":"Initial setup"},{"location":"server/deployment/#ini-options","text":"You will notice that the .ini file has quite a few different options defined, in addition to the JVM options defined with -vmargs . We will analyze them in this section. -console allows us to use the OSGi console to manage Hawk instances. -consoleLog plugs Eclipse logging into the console, for following what is going with the server. -Dartemis.security.enabled=false disables the Shiro security realm for the embedded Artemis server. Production environments should set this to true . -Dhawk.artemis.host=localhost has Artemis listening only on 127.0.0.1. You should change this to the IP address or hostname of the network interface that you want Artemis to listen on. -Dhawk.artemis.listenAll=false prevents Artemis from listening on all addresses. You can set this to true and ignore hawk.artemis.host . -Dhawk.artemis.sslEnabled=false disables HTTPS on Artemis. If you enable SSL, you will need to check the \"Enabling HTTPS\" section further below! -Dhawk.tcp.port=2080 enables the TCP server for only the Hawk API, and not the Users management one. This API is unsecured, so do this at your own risk. For production environments, you should remove this line. -Dhawk.tcp.thriftProtocol=TUPLE changes the Thrift protocol (encoding) that should be used for the TCP endpoint. -Dorg.eclipse.equinox.http.jetty.customizer.class=org.hawk.service.server.gzip.Customizer is needed for the * -Dorg.osgi.service.http.port=8080 sets the HTTP port for the APIs to 8080. -Dorg.osgi.service.http.port.secure=8443 sets the HTTPS port for the APIs to 8443. -Dosgi.noShutdown=true is needed for the server to stay running. -Dsvnkit.library.gnome-keyring.enabled=false is required to work around a bug in the integration of the GNOME keyring in recent Eclipse releases. -eclipse.keyring and -eclipse.password are the paths to the keyring and keyring password files which store the VCS credentials Hawk needs to access password-protected SVN repositories. (For Git repositories, you are assumed to keep your own clone and do any periodic pulling yourself.) -XX:+UseG1GC (part of -vmargs ) improves garbage collection in OrientDB and Neo4j. -XX:+UseStringDeduplication (part of -vmargs as well) noticeably reduces memory use in OrientDB.","title":".ini options"},{"location":"server/deployment/#concerns-for-production-environments","text":"One important detail for production environments is turning on security. This is disabled by default to help with testing and initial evaluations, but it can be enabled by running the server once, shutting it down and then editing the shiro.ini file appropriately (relevant sections include comments on what to do) and switching artemis.security.enabled to true in the mondo-server.ini file. The MONDO server uses an embedded MapDB database, which is managed through the Users [[Thrift API]]. Once security is enabled, all Thrift APIs and all external (not in-VM) Artemis connections become password-protected. If you enable security, you will want to ensure that -Dhawk.tcp.port is not present in the mondo-server.ini file, since the Hawk TCP port does not support security for the sake of raw performance. If you are deploying this across a network, you will need to edit the mondo-server.ini file and customize the hawk.artemis.host line to the host that you want the Artemis server to listen to. This should be the IP address or hostname of the MONDO server in the network, normally. The Thrift API uses this hostname as well in its replies to the watchModelChanges operation in the Hawk API. Additionally, if the server IP is dynamic but has a consistent DNS name (e.g. an Amazon VM + a dynamic DNS provider), we recommend setting hawk.artemis.listenAll to true (so the Artemis server will keep listening on all interfaces, even if the IP address changes) and using the DNS name for hawk.artemis.host instead of a literal IP address. Finally, production environments should enable and enforce SSL as well, since plain HTTP is insecure. The Linux products include a shell script that generates simple self-signed key/trust stores and indicates which Java system properties should be set on the server and the client.","title":"Concerns for production environments"},{"location":"server/deployment/#secure-storage-of-vcs-credentials","text":"The server hosts a copy of the Hawk model indexer, which may need to access remote Git and Subversion repositories. To access password-protected repositories, the server will need to store the proper credentials in a secure way that will not expose them to other users in the same machine. To achieve this goal, the MONDO server uses the Eclipse secure storage facilities to save the password in an encrypted form. Users need to prepare the secure storage by following these two steps: The secure store must be placed in a place no other program will try to access concurrently. This can be done by editing the mondo-server.ini server configuration file and adding this: -eclipse.keyring /path/to/keyringfile That path should be only readable by the user running the server, for added security. An encryption password must be set. For Windows and Mac, the available OS integration should be enough. For Linux environments, two lines have to be added at the beginning of the mondo-server.ini file, specifying the path to a password file with: -eclipse.password /path/to/passwordfile. On Linux, creating a password file from 100 bytes of random data that is only readable by the current user can be done with these commands: $ head -c 100 /dev/random | base64 > /path/to/password $ chmod 400 /path/to/password The server tests on startup that the secure store has been set properly, warning users if encryption is not available and urging them to revise their setup.","title":"Secure storage of VCS credentials"},{"location":"server/deployment/#setting-up-ssl-certificates-for-the-server","text":"SSL is handled through standard Java keystore ( .jks ) files. To produce a keystore with some self-signed certificates, you could use the generate-ssl-certs.sh script included in the Linux distribution, or run these commands from other operating systems (replace CN, OU and so forth with the appropriate values): keytool -genkey -keystore mondo-server-keystore.jks -storepass secureexample -keypass secureexample -dname \"CN=localhost, OU=Artemis, O=ActiveMQ, L=AMQ, S=AMQ, C=AMQ\" -keyalg RSA keytool -export -keystore mondo-server-keystore.jks -file mondo-jks.cer -storepass secureexample keytool -import -keystore mondo-client-truststore.jks -file mondo-jks.cer -storepass secureexample -keypass secureexample -noprompt Once you have your .jks, on the client .ini you'll need to set: -Djavax.net.ssl.trustStore=path/to/client-truststore.jks -Djavax.net.ssl.trustStorePassword=secureexample On the server .ini, you'll need to enable SSL and tell Jetty and Artemis about your KeyStore: -Dorg.eclipse.equinox.http.jetty.https.enabled=true -Dhawk.artemis.sslEnabled=true -Dorg.eclipse.equinox.http.jetty.ssl.keystore=path/to/server-keystore.jks -Djavax.net.ssl.keyStore=path/to/server-keystore.jks You'll be prompted for the key store password three times: two by Jetty and once by the Artemis server. If you don't want these prompts, you could use these properties, but using them is UNSAFE , as another user in the same machine could retrieve these passwords from your process manager: -Djavax.net.ssl.keyStorePassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.keypassword=secureexample -Dorg.eclipse.equinox.http.jetty.ssl.password=secureexample","title":"Setting up SSL certificates for the server"},{"location":"server/eclipse/","text":"Hawk includes multiple optional features to integrate the Thrift APIs with regular Eclipse-based tooling: A custom Hawk instance type that operates over the Thrift API instead of locally. An EMF abstraction that allows for treating remote models as local ones. An editor for the .hawkmodel model access descriptors used by the above EMF resource abstraction. This page documents how these different features can be used. Managing remote Hawk indexers \u00b6 When creating a Hawk instance for the first time (using the dialog shown below), users can specify which factory will be used. The name of the selected factory will be saved into the configuration of the instance, allowing Hawk to recreate the instance in later executions without asking again. Hawk provides a default LocalHawkFactory whose LocalHawk instances operate in the current Java virtual machine. Users can also specify which Hawk components should be enabled. A factory can also be used to \"import\" instances that already exist but Hawk does not know about. For the local case, these would be instances that were previously removed from Eclipse but whose folders were not deleted. The Eclipse import dialog looks like this: The \"Thrift API integration for Hawk GUI\" feature provides a plugin that contributes a new indexer factory, ThriftRemoteHawkFactory, which produces ThriftRemoteHawk instances that use ThriftRemoteModelIndexer indexers. When creating a new instance, the factory will use the createInstance operation to add the instance to the server. When used to \"import\", the remote factory retrieves the list of Hawk instances available on the server through the listInstances operation of the Thrift API. Management actions (such as starting or stopping the instance) and their results are likewise translated between the user interface and the Thrift API. The Hawk user interface provides live updates on the current state of each indexer, with short status messages and an indication of whether the indexer is stopped, running or updating. Management actions and queries are disabled during an update, to prevent data consistency issues. The Hawk indexer in the remote server talks to the client through an Artemis queue: please make sure Artemis has been set up correctly in the server (see the setup guide ). All these aspects are transparent to the user: the only difference is selecting the appropriate \"Instance type\" in the new instance or import dialogs and entering the URL to the Hawk Thrift endpoint. If the remote instance type is chosen, Hawk will only list the Hawk components that are installed in the server, which may differ from those installed in the client. Editor for remote model access descriptors \u00b6 There are many different use cases for retrieving models over the network, each with their own requirements. The EMF model abstraction uses a .hawkmodel model access descriptor to specify the exact configuration we want to use when fetching the model over the network. .hawkmodel files can be opened by any EMF-compatible tool and operate just like a regular model. To simplify the creation and maintenance of these .hawkmodel files, an Eclipse-based editor is provided in the \"Remote Hawk EMF Model UI Feature\". The editor is divided into three tabs: a form-based tab for editing most aspects of the descriptor in a controlled manner, another form-based tab for editing the effective metamodel to limit the contents of the model, and a text-based tab for editing the descriptor directly. Main tab \u00b6 Here is a screenshot of the main tab: The main form-based tab is divided into three sections: The \"Instance\" section provides connection details for the remote Hawk instance: the URL of the Thrift endpoint, the Thrift protocol to use (more details in D5.6) and the name of the Hawk instance within the server. \"Instance name\" can be clicked to open a selection dialog with all the available instances. The \"Username\" and \"Password\" fields only need to be filled in if using the .hawkmodel file outside Eclipse. When using the .hawkmodel inside Eclipse, the remote EMF abstraction will fall back on the credentials stored in the Eclipse secure store if needed. The \"Contents\" section allows for filtering the contents of the Hawk index to be read and changing how they should be loaded: By default, the entire index is retrieved (repository URL is '*', file pattern is '*' and no query is used). The \"Repository URL\", \"File pattern(s)\" and \"Query language\" labels can be clicked to open selection dialogs with the appropriate options. The default loading mode is \"GREEDY\" (send the entire contents of the model in one message), but various lazy loading modes are available. The contents of the index can be split over the different source files or not. While splitting by file is useful for browsing, some EMF-based tools may not be compatible with it. The \"Default namespaces\" field makes it possible to resolve ambiguous type names. For instance, both the IFC2x3 and the IFC4 metamodels have a type called IfcActor . Without this field, the query would need to specify which one of the two metamodels should be used on every reference to IfcActor , which is unwieldy and prone to mistakes. With this field filled, the query will be told to resolve ambiguous type references to those of the IFC2x3 metamodel. The \"Page size for initial load\" field can be set to a value other than 0, indicating that during the initial load of the model, its contents should not be sent in one response message, but rather divided into \"pages\" of a certain size. It was observed that a GREEDY loading mode with an adequate page size can be faster to load than a lazy loading mode, while still keeping server memory and bandwidth requirements under control. The \"Subscription\" section allows users to enable live updates in the opened model through the watchGraphChanges operation and an Apache Artemis queue of a certain durability. In order to allow the server to recognize users that reconnect after a connection loss, a unique client ID should be provided. Effective metamodel tab \u00b6 The effective metamodel editor tab presents a table that lists all the metamodels registered in the selected remote Hawk instance, their types, and their features (called \"slots\" by the Hawk API). It is structured as a tree with three levels, with the metamodels at the root level, the types inside the metamodels, and their slots inside the types. The implicit default is that all metamodels are completely included, but users can manually include or exclude certain metamodels, types or slots within the types. This can be done through drop-down selection lists on the \"State\" column of the table, or through the buttons on the right of the table: \"Include all\" resets the entire table to the default state of implicitly including everything. \"Exclude all\" resets the entire table to excluding all metamodels. \"Exclude\" and \"Include\" only change the state of the currently selected element. \"Reset\" returns the currently selected element to the \"Default\" state. The effective metamodel is saved as part of the .hawkmodel file, and uses both inclusion and exclusion rules to remain as compact as possible (as it will need to be sent over the network). The rules work as follows: A metamodel is included if it is \"Included\", or if it has the \"Default\" state and no metamodels are explicitly \"Included\". A type is included if it is not \"Excluded\" and its metamodel is included. A slot is included if it is not \"Excluded\" and its type is included.","title":"Eclipse client"},{"location":"server/eclipse/#managing-remote-hawk-indexers","text":"When creating a Hawk instance for the first time (using the dialog shown below), users can specify which factory will be used. The name of the selected factory will be saved into the configuration of the instance, allowing Hawk to recreate the instance in later executions without asking again. Hawk provides a default LocalHawkFactory whose LocalHawk instances operate in the current Java virtual machine. Users can also specify which Hawk components should be enabled. A factory can also be used to \"import\" instances that already exist but Hawk does not know about. For the local case, these would be instances that were previously removed from Eclipse but whose folders were not deleted. The Eclipse import dialog looks like this: The \"Thrift API integration for Hawk GUI\" feature provides a plugin that contributes a new indexer factory, ThriftRemoteHawkFactory, which produces ThriftRemoteHawk instances that use ThriftRemoteModelIndexer indexers. When creating a new instance, the factory will use the createInstance operation to add the instance to the server. When used to \"import\", the remote factory retrieves the list of Hawk instances available on the server through the listInstances operation of the Thrift API. Management actions (such as starting or stopping the instance) and their results are likewise translated between the user interface and the Thrift API. The Hawk user interface provides live updates on the current state of each indexer, with short status messages and an indication of whether the indexer is stopped, running or updating. Management actions and queries are disabled during an update, to prevent data consistency issues. The Hawk indexer in the remote server talks to the client through an Artemis queue: please make sure Artemis has been set up correctly in the server (see the setup guide ). All these aspects are transparent to the user: the only difference is selecting the appropriate \"Instance type\" in the new instance or import dialogs and entering the URL to the Hawk Thrift endpoint. If the remote instance type is chosen, Hawk will only list the Hawk components that are installed in the server, which may differ from those installed in the client.","title":"Managing remote Hawk indexers"},{"location":"server/eclipse/#editor-for-remote-model-access-descriptors","text":"There are many different use cases for retrieving models over the network, each with their own requirements. The EMF model abstraction uses a .hawkmodel model access descriptor to specify the exact configuration we want to use when fetching the model over the network. .hawkmodel files can be opened by any EMF-compatible tool and operate just like a regular model. To simplify the creation and maintenance of these .hawkmodel files, an Eclipse-based editor is provided in the \"Remote Hawk EMF Model UI Feature\". The editor is divided into three tabs: a form-based tab for editing most aspects of the descriptor in a controlled manner, another form-based tab for editing the effective metamodel to limit the contents of the model, and a text-based tab for editing the descriptor directly.","title":"Editor for remote model access descriptors"},{"location":"server/eclipse/#main-tab","text":"Here is a screenshot of the main tab: The main form-based tab is divided into three sections: The \"Instance\" section provides connection details for the remote Hawk instance: the URL of the Thrift endpoint, the Thrift protocol to use (more details in D5.6) and the name of the Hawk instance within the server. \"Instance name\" can be clicked to open a selection dialog with all the available instances. The \"Username\" and \"Password\" fields only need to be filled in if using the .hawkmodel file outside Eclipse. When using the .hawkmodel inside Eclipse, the remote EMF abstraction will fall back on the credentials stored in the Eclipse secure store if needed. The \"Contents\" section allows for filtering the contents of the Hawk index to be read and changing how they should be loaded: By default, the entire index is retrieved (repository URL is '*', file pattern is '*' and no query is used). The \"Repository URL\", \"File pattern(s)\" and \"Query language\" labels can be clicked to open selection dialogs with the appropriate options. The default loading mode is \"GREEDY\" (send the entire contents of the model in one message), but various lazy loading modes are available. The contents of the index can be split over the different source files or not. While splitting by file is useful for browsing, some EMF-based tools may not be compatible with it. The \"Default namespaces\" field makes it possible to resolve ambiguous type names. For instance, both the IFC2x3 and the IFC4 metamodels have a type called IfcActor . Without this field, the query would need to specify which one of the two metamodels should be used on every reference to IfcActor , which is unwieldy and prone to mistakes. With this field filled, the query will be told to resolve ambiguous type references to those of the IFC2x3 metamodel. The \"Page size for initial load\" field can be set to a value other than 0, indicating that during the initial load of the model, its contents should not be sent in one response message, but rather divided into \"pages\" of a certain size. It was observed that a GREEDY loading mode with an adequate page size can be faster to load than a lazy loading mode, while still keeping server memory and bandwidth requirements under control. The \"Subscription\" section allows users to enable live updates in the opened model through the watchGraphChanges operation and an Apache Artemis queue of a certain durability. In order to allow the server to recognize users that reconnect after a connection loss, a unique client ID should be provided.","title":"Main tab"},{"location":"server/eclipse/#effective-metamodel-tab","text":"The effective metamodel editor tab presents a table that lists all the metamodels registered in the selected remote Hawk instance, their types, and their features (called \"slots\" by the Hawk API). It is structured as a tree with three levels, with the metamodels at the root level, the types inside the metamodels, and their slots inside the types. The implicit default is that all metamodels are completely included, but users can manually include or exclude certain metamodels, types or slots within the types. This can be done through drop-down selection lists on the \"State\" column of the table, or through the buttons on the right of the table: \"Include all\" resets the entire table to the default state of implicitly including everything. \"Exclude all\" resets the entire table to excluding all metamodels. \"Exclude\" and \"Include\" only change the state of the currently selected element. \"Reset\" returns the currently selected element to the \"Default\" state. The effective metamodel is saved as part of the .hawkmodel file, and uses both inclusion and exclusion rules to remain as compact as possible (as it will need to be sent over the network). The rules work as follows: A metamodel is included if it is \"Included\", or if it has the \"Default\" state and no metamodels are explicitly \"Included\". A type is included if it is not \"Excluded\" and its metamodel is included. A slot is included if it is not \"Excluded\" and its type is included.","title":"Effective metamodel tab"},{"location":"server/file-config/","text":"Hawk server includes an API to add Hawk instances that are used to index and query models. The configuration engine allows the server to create and configure Hawk instances as per user-created configuration files. The server should be ready to receive user queries upon startup without any interaction from user or clients. Upon startup, Hawk server reads and parses configuration files, and then it creates/updates hawk instances as per configuration files. NOTE: the Hawk server no longer writes to configuration files. If an instance configuration changes during operation, this configuration is persisted through the current HawkConfig mechanism. Configuration files will not overwrite any of the changed settings. The only exception is the polling min/max which will revert to config file settings if a server is restarted. Format \u00b6 Configuration files are XML files that define hawk instance name and its configuration. An XML schema can be found at HawkServerConfigurationSchema.xsd . A sample configuration file can be found at Sample Configuration File The XML should include the following elements: Table 1: List of XML elements in configuration file \u00b6 Element Name Parent Element Name multiplicity Value Description \u2018hawk\u2019 xml 1 None Root element \u2018delay\u2019 \u2018hawk\u2019 1 None Polling configuration \u2018plugins\u2019 \u2018hawk\u2019 0-1 None List of plugins (to be/that are) enabled \u2018plugin\u2019 \u2018plugins\u2019 0-* None Plugin name \u2018metamodels\u2019 \u2018hawk\u2019 0-1 None List of metamodels (to be/that are) registered \u2018metamodel\u2019 \u2018metamodels\u2019 0-* None Metamodel parameters \u2018repositories\u2019 \u2018hawk\u2019 0-1 None List of repositories (to be/that are) added \u2018repository\u2019 \u2018repositories\u2019 0-* None Repository parameters \u2018derivedAttributes\u2019 \u2018hawk\u2019 0-1 None List of derived attributes (to be/that are) added \u2018derivedAttribute\u2019 \u2018derivedAttributes\u2019 0-* None Derived attribute parameters \u2018derivation\u2019 \u2018derivedAttribute\u2019 0-1 None Derivation parameters \u2018logic\u2019 \u2018derivation\u2019 0-1 CDATA section An executable expression of the derivation logic in the language specified. \u2018indexedAttributes\u2019 \u2018hawk\u2019 0-1 None List of indexed attributes (to be/that are) added \u2018indexedAttribute\u2019 \u2018indexedAttributes\u2019 0-* None Indexed attribute parameters Table 2: \u2018hawk\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018hawk\u2019 \u2018name\u2019 Required String The unique name of the new Hawk instance \u2018backend\u2019 Required String The name of the backend to be used (e.g.org.hawk.orientdb.OrientDatabase, org.hawk.orientdb.RemoteOrientDatabase) Table 3: \u2018delay\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018delay\u2019 \u2018min\u2019 Required String Minimum delay between periodic synchronization in milliseconds \u2018max\u2019 Required String Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization) Table 4: \u2018plugin\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018plugin\u2019 \u2018name\u2019 Required String e.g. (org.hawk.modelio.exml.listeners.ModelioGraphChangeListener, org.hawk.modelio.exml.metamodel.ModelioMetaModelResourceFactory, org.hawk.modelio.exml.model.ModelioModelResourceFactory) Table 5: \u2018metamodel\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018metamodel\u2019 \u2018location\u2019 Optional String Location of metamodel file to be registered ~~\u2018uri\u2019~~ ~~Optional~~ ~~String~~ ~~Metamodel URI. This value is set automatically by server to list registered metamodels~~ Table 6: \u2018repository\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018repository\u2019 \u2018location\u2019 Required String Location of the repository \u2018type\u2019 Optional String The type of repository available repository types () \u2018user\u2019 Optional String Username for logging into the VCS \u2018pass\u2019 Optional String Password for logging into the VCS \u2018frozen\u2019 Optional String If the repository is frozen (true/false) Table 7: \u2018derivedAttribute\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018derivedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the derived attribute \u2018typeName\u2019 Required String The name of the type to which the derived attribute belongs \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the de- rived attribute belongs \u2018attributeType\u2019 Optional String The (primitive) type of the derived attribute \u2018isOrdered\u2019 Optional String A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true) \u2018isUnique\u2019 Optional String A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true) \u2018isMany\u2019 Optional String The multiplicity of the derived attribute Table 8: \u2018derivation\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018derivation\u2019 \u2018language\u2019 Required String The language used to express the derivation logic. Available labguages in Hawk: org.hawk.epsilon.emc.EOLQueryEngine, org.hawk.orientdb.query.OrientSQLQueryEngine, org.hawk.epsilon.emc.EPLQueryEngine Table 9: \u2018indexedAttribute\u2019 attributes \u00b6 Element Name Attribute name Optional/Required Type Description \u2018indexedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the indexed attribute. \u2018typeName\u2019 Required String The name of the type to which the indexed attribute \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the indexed attribute belongs. Location \u00b6 Configuration files are expected to be located in the \u2018configuration\u2019 folder in the server\u2019s home directory. Each Hawk instance should have its own configuration file. There are no rules on how the file should be named. It is a good practice to include hawk instance name in the file name for easy recognition. How to use/enable Hawk instance configuration engine \u00b6 You can follow this video tutorial , or alternatively follow these steps: Download the hawk-server-*.zip file for your operating system and architecture of choice from Hawk Server With Configuration ) Create a configuration file for each instance required to run in the Hawk server. Edit configuration files: Set instance name, backend, delay Add list of plugins to be enabled Add metamodel file to location to be registered Add repositories that are to be indexed Add any required derived attributes Add any required indexed attributes Save the configuration files to the \u2018configuration\u2019 folder in the server\u2019s home directory (see figure 1) Perform any other configuration that are required by Hawk Server and start the server (by following instructions at Deploying-and-running-the-server ) Check if the hawk instances are added and running by typing \u2018hawkListInstances\u2019 in the server\u2019s command terminal: Usage Notes \u00b6 Deleting configuration files from the directory will not delete instances from the server. However, the server will not start those instances. To test Hawk server with Measure Platform, refer to Using HawkQueryMeasure to query Hawk instance running in Hawk Server","title":"File-based configuration"},{"location":"server/file-config/#format","text":"Configuration files are XML files that define hawk instance name and its configuration. An XML schema can be found at HawkServerConfigurationSchema.xsd . A sample configuration file can be found at Sample Configuration File The XML should include the following elements:","title":"Format"},{"location":"server/file-config/#table-1-list-of-xml-elements-in-configuration-file","text":"Element Name Parent Element Name multiplicity Value Description \u2018hawk\u2019 xml 1 None Root element \u2018delay\u2019 \u2018hawk\u2019 1 None Polling configuration \u2018plugins\u2019 \u2018hawk\u2019 0-1 None List of plugins (to be/that are) enabled \u2018plugin\u2019 \u2018plugins\u2019 0-* None Plugin name \u2018metamodels\u2019 \u2018hawk\u2019 0-1 None List of metamodels (to be/that are) registered \u2018metamodel\u2019 \u2018metamodels\u2019 0-* None Metamodel parameters \u2018repositories\u2019 \u2018hawk\u2019 0-1 None List of repositories (to be/that are) added \u2018repository\u2019 \u2018repositories\u2019 0-* None Repository parameters \u2018derivedAttributes\u2019 \u2018hawk\u2019 0-1 None List of derived attributes (to be/that are) added \u2018derivedAttribute\u2019 \u2018derivedAttributes\u2019 0-* None Derived attribute parameters \u2018derivation\u2019 \u2018derivedAttribute\u2019 0-1 None Derivation parameters \u2018logic\u2019 \u2018derivation\u2019 0-1 CDATA section An executable expression of the derivation logic in the language specified. \u2018indexedAttributes\u2019 \u2018hawk\u2019 0-1 None List of indexed attributes (to be/that are) added \u2018indexedAttribute\u2019 \u2018indexedAttributes\u2019 0-* None Indexed attribute parameters","title":"Table 1: List of XML elements in configuration file"},{"location":"server/file-config/#table-2-hawk-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018hawk\u2019 \u2018name\u2019 Required String The unique name of the new Hawk instance \u2018backend\u2019 Required String The name of the backend to be used (e.g.org.hawk.orientdb.OrientDatabase, org.hawk.orientdb.RemoteOrientDatabase)","title":"Table 2:     \u2018hawk\u2019 attributes"},{"location":"server/file-config/#table-3-delay-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018delay\u2019 \u2018min\u2019 Required String Minimum delay between periodic synchronization in milliseconds \u2018max\u2019 Required String Maximum delay between periodic synchronization in milliseconds (0 to disable periodic synchronization)","title":"Table 3:     \u2018delay\u2019 attributes"},{"location":"server/file-config/#table-4-plugin-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018plugin\u2019 \u2018name\u2019 Required String e.g. (org.hawk.modelio.exml.listeners.ModelioGraphChangeListener, org.hawk.modelio.exml.metamodel.ModelioMetaModelResourceFactory, org.hawk.modelio.exml.model.ModelioModelResourceFactory)","title":"Table 4:     \u2018plugin\u2019 attributes"},{"location":"server/file-config/#table-5-metamodel-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018metamodel\u2019 \u2018location\u2019 Optional String Location of metamodel file to be registered ~~\u2018uri\u2019~~ ~~Optional~~ ~~String~~ ~~Metamodel URI. This value is set automatically by server to list registered metamodels~~","title":"Table 5:     \u2018metamodel\u2019 attributes"},{"location":"server/file-config/#table-6-repository-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018repository\u2019 \u2018location\u2019 Required String Location of the repository \u2018type\u2019 Optional String The type of repository available repository types () \u2018user\u2019 Optional String Username for logging into the VCS \u2018pass\u2019 Optional String Password for logging into the VCS \u2018frozen\u2019 Optional String If the repository is frozen (true/false)","title":"Table 6:     \u2018repository\u2019 attributes"},{"location":"server/file-config/#table-7-derivedattribute-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018derivedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the derived attribute \u2018typeName\u2019 Required String The name of the type to which the derived attribute belongs \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the de- rived attribute belongs \u2018attributeType\u2019 Optional String The (primitive) type of the derived attribute \u2018isOrdered\u2019 Optional String A flag specifying whether the order of the values of the derived attribute is significant (only makes sense when isMany=true) \u2018isUnique\u2019 Optional String A flag specifying whether the the values of the derived attribute are unique (only makes sense when isMany=true) \u2018isMany\u2019 Optional String The multiplicity of the derived attribute","title":"Table 7:    \u2018derivedAttribute\u2019 attributes"},{"location":"server/file-config/#table-8-derivation-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018derivation\u2019 \u2018language\u2019 Required String The language used to express the derivation logic. Available labguages in Hawk: org.hawk.epsilon.emc.EOLQueryEngine, org.hawk.orientdb.query.OrientSQLQueryEngine, org.hawk.epsilon.emc.EPLQueryEngine","title":"Table 8:     \u2018derivation\u2019 attributes"},{"location":"server/file-config/#table-9-indexedattribute-attributes","text":"Element Name Attribute name Optional/Required Type Description \u2018indexedAttribute\u2019 \u2018attributeName\u2019 Required String The name of the indexed attribute. \u2018typeName\u2019 Required String The name of the type to which the indexed attribute \u2018metamodelUri\u2019 Required String The URI of the metamodel to which the indexed attribute belongs.","title":"Table 9:     \u2018indexedAttribute\u2019 attributes"},{"location":"server/file-config/#location","text":"Configuration files are expected to be located in the \u2018configuration\u2019 folder in the server\u2019s home directory. Each Hawk instance should have its own configuration file. There are no rules on how the file should be named. It is a good practice to include hawk instance name in the file name for easy recognition.","title":"Location"},{"location":"server/file-config/#how-to-useenable-hawk-instance-configuration-engine","text":"You can follow this video tutorial , or alternatively follow these steps: Download the hawk-server-*.zip file for your operating system and architecture of choice from Hawk Server With Configuration ) Create a configuration file for each instance required to run in the Hawk server. Edit configuration files: Set instance name, backend, delay Add list of plugins to be enabled Add metamodel file to location to be registered Add repositories that are to be indexed Add any required derived attributes Add any required indexed attributes Save the configuration files to the \u2018configuration\u2019 folder in the server\u2019s home directory (see figure 1) Perform any other configuration that are required by Hawk Server and start the server (by following instructions at Deploying-and-running-the-server ) Check if the hawk instances are added and running by typing \u2018hawkListInstances\u2019 in the server\u2019s command terminal:","title":"How to use/enable Hawk instance configuration engine"},{"location":"server/file-config/#usage-notes","text":"Deleting configuration files from the directory will not delete instances from the server. However, the server will not start those instances. To test Hawk server with Measure Platform, refer to Using HawkQueryMeasure to query Hawk instance running in Hawk Server","title":"Usage Notes"},{"location":"server/logging/","text":"Logging in Hawk is done through the Logback library. The specific logback.xml file is part of the org.hawk.service.server.logback plugin fragment. If you need to edit it, it is located in the plugins/org.hawk.service.server.logback_<HAWK RELEASE> folder from the main directory of the server. A typical configuration with Hawk logging at the DEBUG level, with time-based rolling and all messages going to the hawk.log file would look as follows: <configuration> <appender name= \"STDOUT\" class= \"ch.qos.logback.core.ConsoleAppender\" > <layout class= \"ch.qos.logback.classic.PatternLayout\" > <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </layout> </appender> <appender name= \"FILE\" class= \"ch.qos.logback.core.rolling.RollingFileAppender\" > <file> hawk.log </file> <encoder class= \"ch.qos.logback.classic.encoder.PatternLayoutEncoder\" > <Pattern> %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n </Pattern> </encoder> <rollingPolicy class= \"ch.qos.logback.core.rolling.TimeBasedRollingPolicy\" > <!-- rollover daily --> <fileNamePattern> mylog-%d{yyyy-MM-dd}.%i.txt </fileNamePattern> <maxHistory> 60 </maxHistory> </rollingPolicy> </appender> <logger name= \"org.eclipse.jetty\" level= \"warn\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <logger name= \"ch.qos.logback\" level= \"error\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <logger name= \"org.apache.shiro\" level= \"error\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> </logger> <!-- Change to \"error\" if Hawk produces too many messages for you --> <logger name= \"org.hawk\" level= \"debug\" additivity= \"false\" > <appender-ref ref= \"STDOUT\" /> <appender-ref ref= \"FILE\" /> </logger> <root level= \"debug\" > <appender-ref ref= \"STDOUT\" /> </root> </configuration>","title":"Logging"}]}
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index 18fa1ea..b0ca2d1 100644
--- a/sitemap.xml.gz
+++ b/sitemap.xml.gz
Binary files differ
