# Contributing to Eclipse OCL

Thanks for your interest in this project.

## Project description

Eclipse OCL™ is an implementation of the Object Constraint Language (OCL) OMG
standard for EMF-based models. Classic OCL Ecore/UML The Classic core OCL
component provides the following capabilities to support OCL integration:
Defines APIs for parsing and evaluating OCL constraints and queries on Ecore or
UML models. Defines Ecore and UML implementations of the OCL abstract syntax
model, including support for serialization of parsed OCL expressions. Provides a
Visitor API for analyzing/transforming the AST model of OCL expressions.
Provides an extensibility API for clients to customize the parsing and
evaluation environments used by the parser. The accompanying examples provide: A
Console for interactive evaluation of OCL expression on models. (Indigo) An
Impact Analyzer to support analysis and optimised re-evaluation. The core OCL
parser is generated by the LALR Parser Generator, a SourceForge project,
licensed under the EPL v1.0. Download it from the LPG home page. This site
includes the generator executable required to regenerate the parser code.
Unified Pivot OCL The Pivot OCL prototypes resolution of many oroblems in the
OMG 2.4 specification. An Xtext editor for OCL expressions (used by Papyrus and
the Console). An Xtext editor for OCL documents complemementing meta-models
(Complete OCL). An Xtext editor for OCLinEcore - OCL embedded in Ecore. An Xtext
editor for the OCL 'Standard' Library model. A UML-aligned Unified or Pivot OCL
meta-model supporting templates and reflection. An OCL evaluator exploiting the
extensible OCL library model. The accompanying examples provide: An Xtext
Console for interactive evaluation of OCL expression on models. Extensible
direct OCL to Java code generation A Validity View for detailed
Constraint/ModelElement validity visualization Extensible OCL debugger

* https://projects.eclipse.org/projects/modeling.mdt.ocl

## Terms of Use

This repository is subject to the Terms of Use of the Eclipse Foundation

* https://www.eclipse.org/legal/termsofuse.php

## Developer resources

Information regarding source code management, builds, coding standards, and
more.

* https://projects.eclipse.org/projects/modeling.mdt.ocl/developer

The project maintains the following source code repositories

* https://git.eclipse.org/r/ocl/org.eclipse.ocl
* https://github.com/eclipse-ocl/ocl-website

## Eclipse Development Process

This Eclipse Foundation open project is governed by the Eclipse Foundation
Development Process and operates under the terms of the Eclipse IP Policy.

* https://eclipse.org/projects/dev_process
* https://www.eclipse.org/org/documents/Eclipse_IP_Policy.pdf

This project uses Bugzilla to track ongoing development and issues.

* Search for issues: https://eclipse.org/bugs/buglist.cgi?product=OCL&
* Create a new report: https://eclipse.org/bugs/enter_bug.cgi?product=OCL&

Be sure to search for existing bugs before you create another one. Remember that
contributions are always welcome!

A project distribution can be built by one of the launch configurations such as

/org.eclipse.ocl.releng.tycho/.launches/Build OCL Distribution - Nightly.launch

## Eclipse Contributor Agreement

In order to be able to contribute to Eclipse Foundation projects you must
electronically sign the Eclipse Contributor Agreement (ECA).

* https://www.eclipse.org/legal/ECA.php

The ECA provides the Eclipse Foundation with a permanent record that you agree
that each of your contributions will comply with the commitments documented in
the Developer Certificate of Origin (DCO). Having an ECA on file associated with
the email address matching the "Author" field of your contribution's Git commits
fulfills the DCO's requirement that you sign-off on your contributions.

For more information, please see the Eclipse Committer Handbook:
https://www.eclipse.org/projects/handbook/#resources-commit

## Contact

Contact the project developers via the project's "dev" list.

* https://dev.eclipse.org/mailman/listinfo/mdt-ocl.dev

