+++++++++++
**Features**
- Add ``XMLTypes`` implementation. This first implementation relies on
``XMLTypes.ecore`` and had been generated using pyecoregen. The generated code
had been manually modified to deal with some current restriction in PyEcore.
The result is a slightly modified version of some ``EClass`` defined in the
xml types metamodel. These modifications does not affect the model layer which
will work as intended, but can give some false information about some types
when reflection on the xml types metamodel is used.
- Add very basic EMF Editing Domain implementation. This simple implementation
allows the user to create/load a resource and to execute/undo/redo commands
that implies element from a resource contained in the Editing domain's
``ResourceSet``. This implementation will evolve by probably adding read only
resource support and copy/paste functionnality.
- Add basic support for ``OrderedSet``'s' ``__setitem__`` method. This very
simple implementation relies on ``insert`` and ``pop`` and currently does
not support ``slices``.
- Add ``__iadd__`` support for collections. This little addition allows you to
add elements to PyEcore collections using ``+=``. This operator also works
for single element as right operand.
- Add ``del obj.attr`` support for ``EObject`` attributes/references. The
support for the ``del`` keywords is only activated on ``EStructuralFeature``
instances. It allows to clean references on elements for a given object.
**WARNING:** this action does not delete the pointed object, it only clears
the reference/collection from the calling element towards the objects.
- Add support for ``dir`` on ``EObject``. The function ``dir()`` now gives a
sum up of all the attributes/references and operations that can be called on
an object. This is really handy when PyEcore is handled in the Python console.
- Add ``**kwargs`` support for dynamic ``EClass``. This allows to have more
fluent constructors. It is important to note that the default behavior when
a named parameter are used is to set the attribute to the value passed as
parameter. Also, ``args`` are accepted, but they are not directly handled.
- Add new class decorator for PyEcore metaclass definition. This new decorator:
``EMetaclass``, uses the ``MetaEClass`` metaclass and provides a convenient
way of defining static EClass. This decorator also reoder the inheritance
tree so, if the defined class does not inherits from ``EObject``, the
decorator makes the defined class inhertit from ``EObject``.
- Add JSON resource serializer. The JSON serializer is able to get an
``EObject`` and serialize it in JSON. It can also takes a JSON representation
of a model, and transform it as an ``EObject``. The JSON format used for
serialization tries to be closed to the format from the
`emfjson-jackson <https://github.com/emfjson/emfjson-jackson>`_ project.
**Bugfixes**
- Fix missing ``EDatatypes`` registration in their respective ``EPackage``. The
data types defined in code generated by pyecoregen was not properly registered
in their ``EPackage``. The result was a ``None`` value when
``datatype.ePackage`` was accessed.
- Fix resource creation if model loading fails for ``ResourceSet``. Even if the
model loading fails, a resource is created in a ResourceSet. This behavior
was problematic as two successive loading of the same faulty model lead to a
failure the first time, but to a success the next time. This commit fixes
this behavior and adds more tests to detect possible regressions about this.
- Fix load error when metamodel prefix is empty. When a metamodel prefix is
empty, special tags, with the namespace encoded inside, are created by lxml.
This was an issue with the xmi loading method as each tag's node was not
properly decoded.
- Improve OrderedSet ``insert/pop`` methods. The default ``OrderedSet``
implementation does not provide methods for ``insert`` and ``pop``. The
current code provided by PyEcore, monkey patching the library, was mixed
with internal PyEcore code. This new implementation split the two concerns
and proposes a better way of dealing with these two methods.
- Fix missing ``containement`` attribute for ``eParameters`` relation. This
missing attribute was reslting in the placement of each ``EParameter`` at
the root of the model instead of the ``EOperation`` they were linked to.
**Miscellaneous**
- Change ``__repr__`` display for ``EClass`` and ``EStructuralFeature``. The
fact that PyEcore is extensible and the basic ``EClass/EStructural``
metaclasses can be extended requires a better representation.
- Add ``__name__`` attribute on instances of ``EClass`` so they look a little
bit more like a python class.
- Improve inheritance tree building for static ``EClass``. This new detection
relies on the fact that an existing EClass already have an ``eClass``
attribute. This modification will prepare the work for the introduction of a
new method for generating static ``EClass``.
- Add missing ``super().__init__()`` call in base classes. This missing
statement could be an issue for multiple inheritance.
- Add better support for ``**kwargs`` in ``EObject`` constructors.
- Improve performance. As attribute are accessed in a lazy-loading way, there
is no more need for post object creation initialization.