
		     Subversion Java integration
		     ===========================

$LastChangedDate: 2003-05-05 15:08:36 -0400 (Mon, 05 May 2003) $


Contents:

     I. STATUS
    II. WHY INTERFACES?
   III. WHY NOT 100% PURE JAVA?
    IV. WHY SWIG?
     V. TODO


I.     STATUS

       A SWIG-based JNI implementation of Java bindings for Subversion
       are under development. They can be built via the
       "swig-java-lib" target of the source tree's top-level make
       file.  If you don't have such a make file, see the INSTALL
       document in the same directory for further instructions.

       The Subversion Java libraries require extensive development to
       be reach a functional state.  Consumption by end users is not
       yet advised.

       Java bindings for Subversion were originally initiated by
       Alexander Mueller (xela) as hand-coded JNI bindings, with the
       intent of producing a desktop GUI client, and were eventually
       discarded in favor of a C++/wxWindows implementation which
       wraps the C reference libraries. Developers of the SWIG
       implementation are encouraged to refer to xela's initial work
       for guidance.


II.    WHY INTERFACES?

  A.   They present an API which is familiar to Java programmers,
       regardless of the implementation generation method
       (e.g. hand-coded, SWIG, etc.).

  B.   They will allow for the possibility of multiple sets of Java
       bindings for Subversion, all presenting an uniform API.


III.   WHY NOT 100% PURE JAVA?

       tigris.org's C library is the reference implementation of a
       Subversion client's logic, and is the most robust client
       implementation available.  An alternative to its rapidly
       maturing code base and active developer community which is of
       similar quality would require significant effort, effort more
       efficiently contributed towards further development of the
       loadable libraries shared by all existing implementations.


IV.    WHY SWIG?

       It's likely that Greg Stein has already answered this on the
       dev@subversion.tigris.org mailing list.  Search the archive
       (http://subversion.tigris.org/servlets/SearchList?list=dev) and
       fill in this space with answers of his from there.

       The main accessor class for the SWIG-generated Java code is
       org.tigris.subversion.swig.Subversion.  It consists of a set of
       static methods which wrap the raw and hard to understand
       generated code.


V.     TODO

       Update xela's JUnit work, adding a swig-java-check target to
       the top-level build system.

           swig-java-check: swig-java-lib

       Start making the client library functional:

       * Add a file (to an existing working copy)
       * Update to a specific global revision
       * Commit a file
       * Check out a working copy
       * etc.
