Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Sphinx/digests

< Sphinx
Revision as of 01:55, 10 July 2015 by Stephaneberle9.gmail.com (Talk | contribs) (Implement Sphinx proxy resolver service for a given metamodel)

Dynamic workflows

Main capabilities

  • Based on MWE2 workflows
  • Can be written in Java or Xtend
  • Can operate on EMF models (handed in and out via slots)
  • Dymamic execution of workflows located in workspace (i.e., within same JVM instance)
  • Execution of binary workflows located in workflow contributor plug-ins

Extras

  • Command line execution
  • Workflow handlers (pre/post run hooks)
  • Support of metamodels without Sphinx integration

How-tos

Create a new dyamic/binary workflow

  • Create a plug-in project in runtime/development workspace
  • Add a dependency to the org.eclipse.sphinx.emf.mwe.dynamic plug-in
  • Create a Java or Xtend class that extends WorkspaceWorkflow
  • Create Java or Xtend classes that extend AbstractWorkspaceWorkflowComponent or AbstractModelWorkflowComponent
  • Add workflow components to workflow

Contribute a binary workflow

  • Use org.eclipse.sphinx.emf.mwe.dynamic.workflowContributors extension point

Run a dynamic or binary workflow interactively

  • Right-click on workflow file to execute or model file(s)/element(s) to operate on
  • Select Run Workflow > Run...

Run a dynamic or binary workflow from the command line

  • Use org.eclipse.sphinx.emf.mwe.dynamic.headless.WorkflowRunner application
  • Specify workspace-relative workflow path or qualified workflow class name using -workflow option
  • Specify absolute/relative model file/element URI using -model option

Create a workflow handler

  • Use org.eclipse.sphinx.emf.mwe.dynamic.workflowHandlers extension point

Check validation

Main capabilities

  • Lightweight approach to model validation
  • Based on EMF's EValidator and Diagnostician
  • Constraint logic in Java or Xtend classes with @Check annotated methods
  • Optional externalization of severities, messages, etc. to EMF-based check catalog
  • Organization of checks in categories
  • Produces EMF Diagnostics and Eclipse problem markers
  • Dedicated Check Validation view

Extras

  • Navigation from Check Validation view entries to related model element in
    • Double-click → associated editor
    • Show-In menu → Model Explorer, Project Explorer, Properties view
  • Execution of EMF's intrinsic model integrity constraints (EObjectValidator)
  • Execution of check validations in workflows

How-tos

Create a new check validator

  • Create a Java or Xtend class that extends AbstractCheckValidator
  • Create check method(s) that have
    • an @Check annotation
    • precisely one parameter through which the model element to be checked can be passed
  • Implement check logic and issue findings using protected error()/warning()/info()/issue() methods
  • Contribute check validator using org.eclipse.sphinx.emf.check.checkvalidators extension point

Run a check validation interactively

  • Right-click on model file(s)/element(s) to be checked
  • Select Validate > Check-based Validation
  • View result in Check Validation view

Create and use a check catalog

  • Create a copy of /org.eclipse.sphinx.emf.check.catalog/model/samples/Empty.checkcatalog and open it in Sample Reflective Ecore Model Editor
  • Edit Catalog properties and add Category and Constraint children as appropriate
  • Associate check methods in check validators with constraints by adding a constraint field to the check method's @Check annotation that refers to the id of the corresponding constraint in the check catalog
  • Optionally restrain applicability of the check method by adding a categories field to @Check annotation that lists only a subset of the categories referenced by corresponding constraint in the check catalog
  • Issue check findings using protected issue() method rather than error()/warning()/info() methods
  • Contribute check catalog and associate it with contributed check validators using org.eclipse.sphinx.emf.check.checkvalidators extension point

Reference information

Diagnostic usage

  • severity → Constraint severity as per error()/warning()/info() method invocation or check catalog
  • source → Qualified check validator class name
  • code → not used, always 0
  • message → Constraint message as per error()/warning()/info() method invocation or check catalog
  • data →
    • DiagnosticLocation referencing affected model object and feature in first position
    • SourceLocation referencing underlying check validator class, check method and constraint id in second position
    • optional user-defined data as per error()/warning()/info() method invocation on subsequent positions

Check Problem marker usage

  • EValidator.URI_ATTRIBUTE → URI of affected model object
  • IMarker.LOCATION → Name of affected model object class and feature extracted from diagnostic data
  • IMarker.SEVERITY → Diagnostic severity
  • IMarker.MESSAGE → Diagnostic message
  • IMarker.SOURCE_ID → Constraint id or name of underlying check validator class and method extracted from diagnostic data if available or diagnostic source otherwise

EMF-IncQuery integration

Main capabilities

  • Fast queries on big models using EMF-IncQuery pattern language (*.eiq files) and powerful indexing backend
  • Easy to use Sphinx-defined model query service providing common model queries (e.g., all instances of)
  • Possibility to implement and use custom model queries alongside
  • Full awareness of Sphinx resource scoping

Extras

  • Fast index-based resolution of proxy objects (i.e., cross-document references)

How-tos

Implement Sphinx model query service for a given metamodel

Use Sphinx model query service

Implement a custom model query

Use a custom model query

Implement Sphinx proxy resolver service for a given metamodel

  • Create a proxy resolution queries as appropriate for the proxy URI format used by given metamodel using EMF-IncQuery pattern language (*.eiq files)
  • Create a Java or Xtend class extending AbstractProxyResolver for every EPackage of the metamodel in question
  • Override and implement initSupportedTypes() and getEObjectCandidates() methods by leveraging EMF-IncQuery-generated proxy resolution query matchers
  • Contribute service to org.eclipse.sphinx.emf.metaModelServices extension point

Model search

Main capabilities

  • Search for model elements with a given name or name pattern
  • New Model Search tab in Eclipse Search dialog
  • Matches shown in Eclipse Search view
  • Java-based default implementation of model search service

Extras

  • Model search service can be overridden with an alternative or EMF-IncQuery-based implementation on a per-metamodel basis
  • Navigation from Search view entries to related model element in
    • Double-click → associated editor
    • Show-In menu → Model Explorer, Project Explorer, Properties view

How-tos

Perform a model search

  • Select Search > Search... > Model Search
  • Enter model element name or name pattern
  • Optionally choose additional search options
  • Click on Search and see matches in Search view

Contribute a simple custom search service for a given metamodel

  • Create a Java or Xtend class implementing IModelSearchService
  • Implement getMatches() methods as appropriate
  • Contribute service to org.eclipse.sphinx.emf.metaModelServices extension point

Contribute an EMF-IncQuery-based custom search service for a given metamodel

  • Create a search query as appropriate to find elements of the given metamodel by their name using EMF-IncQuery pattern language (*.eiq file)
  • Create a Java or Xtend class extending AbstractIncQueryModelSearchService
  • Override an implement getMatches() method by leveraging EMF-IncQuery-generated search query matcher
  • Contribute service to org.eclipse.sphinx.emf.metaModelServices extension point

EMF Compare integration

Main capabilities

  • Comparison of Sphinx-managed models without having to reload them in the compare editor
  • Operation on model files or model elements
  • Synchronization of compare editor dirty and save state with that of underlying Sphinx-managed models

Extras

  • Automatic generation of comparison reports

How-tos

Compare/merge 2 model files/elements

  • Right-click on model files/elements to be compared/merged
  • Select Compare With > Each Other
  • Inspect differences and perform merge operations using corresponding compare editor controls

Save model after comparison/merge

  • Save from compare editor
  • Save in Model Explorer
  • Save from any other Sphinx-based form editor or graphical editor

Contribute a new comparison report generator

  • Created a Java or Xtend class that extends AbstractModelCompareReportGenerator
  • Override and implement postDiff() and doGenerate() methods as appropriate
  • Contribute comparison report generator using org.eclipse.emf.compare.rcp.postProcessor extension point

Reference view

Main capabilities

  • Navigation along the cross-references (i.e., all non-containment reference) of the currently selected model element
  • Shows either all cross-referenced model elements or all cross-referencing model elements

Documentation view

Main capabilities

  • Display of formatted documentation for currently selected model element in HTML
  • Based on Bootstrap and jQuery
  • User-defined rules to decide how documentation is to be retrieved (e.g., from an EAnnotation on the underlying EClass)

Back to the top