Jep 3.4 Release Notes
*********************
This release emphasized Python 3 compatibility and more pythonic syntax when
using java.lang.Iterable and java.util.Collection instances in the Python
interpreter.  It is compatible with Python 2.6, 2.7, 3.2, 3.3, and 3.4.


Python 3 support
~~~~~~~~~~~~~~~~
Jep now supports Python 3.2, 3.3, and 3.4 in addition to Python 2.6 and Python
2.7.  Please make sure to build Jep against the version of Python you intend
to run.  Note that some unit tests will fail against Python 2.6 since they
make use of 2.7 improvements added to unittest.


More modular install
~~~~~~~~~~~~~~~~~~~~
Jep 3.3 installed the jep library (jep.so, libjep.so, or jep.dll) and Jep
jar to the Python lib directory.  3.4 instead installs the library and jar
to the site-packages/jep directory.  The only file that is installed
outside of site-packages is the jep script which is placed in the python/bin
directory.


Improved PyJObject rich compare
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The previous implementation of rich compare only supported the == and !=
operators when comparing two PyJObjects.  If Jep detects the PyJObject is
an instance of java.lang.Comparable, it will also support the other rich compare
operators of <, <=, >, >=.


Added PyJMap type
~~~~~~~~~~~~~~~~~
A new type PyJMap has been created to enable developers to more closely match
Python syntax when working with Java Maps.  PyJMap extends PyJObject to retain
all previous functionality.  PyJMap implements the following Python methods:

* Supports __len__() such as *len(obj)*
* Supports __getitem__() such as *x = obj[key]*
* Supports __setitem__() such as *obj[key] = x*
* Supports __contains__() such as *if key in obj:*

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html


Added PyJIterable, PyJIterator, and PyJCollection types
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New types have been created to enable developers to more closely match Python
syntax when working with Java Iterables and Collections.  All of the new types
extend PyJObject to retain all previous functionality.  The type hierarchy
matches Java in that

* PyJIterable extends PyJObject

  * Supports __iter__() such as *for i in obj:*

* PyJCollection extends PyJIterable

  * Inherits __iter__() from PyJIterable
  * Supports __len__() such as *len(obj)*
  * Supports __contains__() such as *if x in obj:*

* PyJList extends PyJCollection

  * Inherits __iter__(), __len__(), and __contains()__ from PyJCollection
  * Supports indexing and slicing with __getitem__() and __setitem__()


Better OSGi support
~~~~~~~~~~~~~~~~~~~
Thanks to reports from developers using Jep in an OSGi container, we've
improved the code's handling of resources and restarts of Bundles.


Other changes
~~~~~~~~~~~~~
* Jep.getValue(String) will return a HashMap if it detects a Python dictionary
* PyJClass now extends PyJObject for code simplification
* PyJObject now implements __dir__() to support Python 3.3+

