<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <meta content="text/css" http-equiv="Content-Style-Type">
    <style type="text/css">@import url("/css/dba.css");</style>
    <style type="text/css">.effort_header { font-weight:bold; }</style>
    <title>Developer projects</title>
    <script type="text/javascript" src="/js/dba_default.js"></script>
  </head>
  <body>
    <b>Project Sections</b>:
        <a href="../index.html">Home</a>
      | <a href="../specifications/index.html">Specifications</a>
      | <a href="../QA/index.html">QA</a>
      | <a href="./index.html"><b>Development</b></a>
      | <a href="../drivers/index.html">Database Drivers</a><br/>
        <b>Development Sections</b>:
            <a href="../development/projects.html"><b>Developer Projects</b></a>
          | <a href="./project_structure.html">Project Structure</a>
    <hr/>
    <div class="dba">
      <h1 id="dba_dev_projects">Developer Projects</h1>
      <p>Below is a list of projects which could be implemented by interested developers.
      Most of these projects are relatively self-contained, and do not require too much knowledge
      about OOo's code infrastructure.</p>
      <p>Note that this list doesn't claim to be a complete repository of what will be
      done in the near/medium future. There may be items on the list which will never
      be realized, and there definitely are items which are not on the list, but will
      be implemented.</p>
      <p>If you are interested in anything from the list, please speak at
        <a href="mailto:dev@dba.openoffice.org">dev@dba.openoffice.org</a>. We'll gladly
        help you to get started on this.</p>

      <p>Also, make sure you don't miss <a href="http://development.openoffice.org/todo.html">OpenOffice.org's global TODO list</a>,
      which also contains interesting projects for developers.</p>

      <p>Here is what you'll find below:
      <ol>
        <li>
          <a href="#dbase_joins">Joins in dBase queries</a></li>
        <li>
          <a href="#ldap">SDBC driver for LDAP directories</a></li>
        <li>
          <a href="#form_controls">New/Enhanced Form Controls</a></li>
        <li>
          <a href="#form_dialogs">Dialogs with Form Functionality</a></li>
        <li>
          <a href="#driver_modules">Database driver UI modularization</a></li>
        <li>
          <a href="#single_file_backend">HSQLDB: single-file backend</a></li>
        <li>
          <a href="#embed_derby">Embed Derby into OpenOffice.org databases</a></li>
        <li>
          <a href="#cross_access">native, cross-platform access to MS Access databases</a></li>
        <li>
          <a href="#vcards">SDBC driver for vCards</a></li>
        <li>
          <a href="#new_filter">New Filter Dialog</a></li>
      </ol></p>

      <h3>General Notes</h3>
      <p>Whenever we talk about user interface work, this implies working with VCL, the
      Visual Class Library in OpenOffice.org. If you are not familiar with it, you
      will curse it, since especially some of the older parts never heard the word
      "documentation". On the other hand: In opposite to the native platform
      controls, everything is there as source code, so if you like "learning by
      debugging", you will love VCL
      <img src="../images/smile.gif" alt="smile" style="width: 19px; height: 19px;" class="vertically_centerred"/>.</p>

      <p>Additionally, be aware of the fact that feature implementations in
      OpenOffice.org require a specification (you may visit
      <a href="http://specs.openoffice.org">the specifications project</a> for more
      information). There's a rule that nothing is checked into the master branch
      which doesn't have a specification which all stakeholders agreed upon - so
      unlike other open source projects you may know, the specification really is
      an important part. Stakeholders are: the documentation team, the user experience
      team, the quality assurance team, and development. Usually, one representative
      from every team needs to accept your specification.</p>

      <p>Well, don't let this hinder you in starting. Just be aware that there will be a
      time when a specification is finally needed. Most developers don't like writing such documents
      (and some people even claim that <a href="http://www.joelonsoftware.com/articles/fog0000000034.html">they shouldn't</a>).
      Thus, you need to clarify who will take this for you, if you can't/don't want.</p>

      <p>A note about the effort: This is a rather rough guess at the moment. In
      general, it may be a good idea to add two or more weeks or so simply for
      becoming familiar with the code and some concepts, so if it is "2 weeks", don't
      expect to start today and finish it in 14 days ...</p>
		
		<hr style="width: 100%; height: 2px;">

      <!-- ====================== -->
      <!-- Joins in dBase queries -->
      <h3><a name="dbase_joins"></a>Joins in dBase queries</h3>

      <p>The descirption of this project has been moved to
      <a href="http://wiki.services.openoffice.org/wiki/Base_To-Do/Joins_in_dBase_queries" target="_blank">our
      Wiki</a>.</p>
		
		<hr style="width: 100%; height: 2px;">

      <!-- ================================ -->
      <!-- SDBC driver for LDAP directories -->
      <h3><a name="ldap"></a>SDBC driver for LDAP directories</h3>
      <p>The description of this project has been moved to
      <a href="http://wiki.services.openoffice.org/wiki/Base_To-Do/SDBC_driver_for_LDAP_directories" target="_blank">our
      Wiki</a>.</p>
		
		<hr style="width: 100%; height: 2px;">

      <!-- ========================== -->
      <!-- New/Enhanced Form Controls -->
      <h3><a name="form_controls"></a>New/Enhanced Form Controls</h3>
      <p>The description of this project has been moved to
      <a href="http://wiki.services.openoffice.org/wiki/Base_To-Do/New+Enhanced_Form_Controls" target="_blank">our
      Wiki</a>.</p>
		
		<hr style="width: 100%; height: 2px;">

      <!-- =============================== -->
      <!-- Dialogs with Form Functionality -->
      <h3><a name="form_dialogs"></a>Dialogs with Form Functionality</h3>
      <h4>description</h4>
      <p>When creating a form, the user always needs to bother with a Writer (or Calc or
      Draw) document. Very often, this is much too oversized. It would be sufficient
      to have a simple dialog which contains all the data access controls. Now that
      we have UNO-based dialogs (in the Basic IDE), this is possible in general, as
      there already are some basics for doing this. There still would be a lot of
      work to be done (not mentioning the concrete design), but since some months,
      it's at least possible.</p>

      <p>The advantage would be to not slay the user with things she does not bother
      &#8211; a writer document offers a lot of possibilities which are not relevant
      for a form. In some cases, a full writer document does even contradict to what
      users expect from a form &#8211; one thing to mention here is that documents
      are always freely sizable (and even do autosizing according to the previous
      instance of the same document type, the screen resolution, whatever), which is
      nothing you expect from a carefully designed form, where controls are placed at
      concrete positions and have a fixed size.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>C++</li>
                <li>UNO</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>familiarity with OOo's database access and form API</li>
                <li>familiarity with OOo's toolkit API (module com.sun.star.awt)</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>3 months</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>high</td>
          </tr>
        </tbody>
      </table>
      <br/>
		
      <hr style="width: 100%; height: 2px;">

      <!-- =============================== -->
      <!-- Database driver UI modularization -->
      <h3><a name="driver_modules"></a>Database driver UI modularization</h3>
      <h4>description</h4>

      <p>OpenOffice.org Base follows a component-oriented approach for enabling
      database access. For this, database drivers are installed in
      OpenOffice.org which provide access to a certain (class of) database(s).</p>

      <p>While at the driver level, the implementation is pretty good
      modularized, the UI implementation can be improved. Currently, there are
      a lot of places in the code with hard-coded information, such as
      "database X requires UI option Y".</p>

      <p>The goal of this project is to design and implement a reasonable
      architecture for bringing a driver to the UI. The existing
      implementation needs to be migrated to this new architecture. As a proof
      of concept, an existing currently-external driver (e.g. the
      <a href="http://dba.openoffice.org/drivers/postgresql/index.html" title="http://dba.openoffice.org/drivers/postgresql/index.html">native PostgreSQL driver</a>)
      should be modified so that it can be deployed into an OOo installation and makes
      use of the features of the new architecture.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>C++</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>OOo's component technology (UNO)</li>
                <li>OOo's configuration concepts</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>2 months</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>high</td>
          </tr>
        </tbody>
      </table>
      <br/>
		
      <hr style="width: 100%; height: 2px;">

      <!-- =============================== -->
      <!-- HSQLDB: single-file backend -->
      <h3><a name="single_file_backend"></a>HSQLDB: single-file backend</h3>
      <h4>description</h4>

      <p><a href="http:///hsqldb.org" title="http:///hsqldb.org">HSQLDB</a> is the default database
      engine used by OpenOffice.org Base.</p>

      <p>HSQLDB currently creates a number of adjacent files to store its data,
      where all files together comprise the whole database. To allow the user
      of OpenOffice.org Base to have a "all-in-one-file" database experience,
      those HSQL files are currently embedded in some OOo-specific
      container-file (the .odb file).</p>

      <p>To overcome various disadvantages of this approach, it is desirable that
      HSQL stores its data in a single, large file. Preliminary code and
      concepts exist for this, but no final implementation.</p>

      <p><i>The following project description was provided by Fred Toussi, HSQLDB project owner:</i>

      <p>Currently, HSQLDB stores the database information in four separate files. These files are
      written to using different API�s. Streams are used for some while random access is used for others.</p>

      <p>The project�s aim is to allow a single file to be used for all permanent data (temporary session
      data, or file locking may still use a separate file). So existing files that need to be integrated
      into one are the .properties, .log, .data and .backup files. The new single file will be accessed
      only as a random access file.</p>

      <p>The project consists of developing an interface between existing code. At the low level, there is
      already an implementation of a random access file, org.hsqldb.persist.ScaledRAFile. The new interfaces
      will allow existing file services to use the single random access file.</p>

      <p>All the files in the org.hsqldb.persist package should be studied, with the understanding that the
      functionality of many of these files, including lock and property saving functionality, will become
      redundant with the introduction of single file persistence.</p>

      <p>The student is expected to study and become proficient in the Java IO packages and the API calls to
      these packages currently made from HSQLDB, and write the code and test packages.</p>

      <p>The mentor will provide regular guidance and help on the design of required interfaces and supervise
      their implementation.</p>

      <p>As this is considered an essential development for HSQLDB, all the work done by the student will be
      used, and if necessary, modified or improved by other project developers. The student will get due credit
      and will be provided with work references by the HSQLDB Project Maintainer upon successful completion of
      the project.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>Java expertise</li>
                <li>relational databases</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>HSQLDB architecture</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>2 months</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>high</td>
          </tr>
        </tbody>
      </table>
      <br/>
		  
      <hr style="width: 100%; height: 2px;">

      <!-- =============================== -->
      <!-- Embed Derby into OpenOffice.org databases -->
      <h3><a name="embed_derby"></a>Embed Derby into OpenOffice.org databases</h3>

      <p>The descirption of this project has been moved to
      <a href="http://wiki.services.openoffice.org/wiki/Base_To-Do#Embed_Derby_into_OpenOffice.org_databases" target="_blank">our
      Wiki</a>.</p>
		  <p> See also some <a href="http://openoffice.markmail.org/thread/6l27fyv7vpjwogsg">old information </a>on this topic from the dba@dev.openoffice.org archives. </p>
		  
		  <hr style="width: 100%; height: 2px;">

      <!-- ==================================================== -->
      <!-- Native, cross-platform access to MS Access databases -->
      <h3><a name="cross_access"></a>Native, cross-platform access to MS Access
        databases</h3>
      <h4>description</h4>
      <p><em>preliminary note</em>: In the meantime, there is an alpha version of a driver for this.
      It's an OOo database driver which uses <a href="http://mdbtools.sourceforge.net">MDB Tools</a> to
      read MS Access databases. See <a href="../drivers/mdb/index.html">it's home page</a> for more info.</p>

      <p>A major goal of OpenOffice.org is interoperability with other office
      applications, especially with a certain office suite which currently has some greater market share than
      OpenOffice.org has :).</p>

      <p>Unfortunately, currently OOo users, as long as they don't work on Windows, are not able <em>at all</em>
      to access the databases of this office suite - we cannot read MDB files on platforms other than Windows
      (where we can use Microsofts own API).</p>

      <p>So the goal here is to allow Linux users to at least read the data from MDB files, using OOo.</p>

      <p>There are several ways how this could be done.<br/>
      One is to use MDB Tools, and wrap them in OOo. Since the SQL capabilities of the MDB Tools parser are
      limited (e.g., no OR conditions in WHERE clauses are allowed), this requires work in either MDB Tools
      itself (by improving their parser), or it would be used as provider for raw data, and OOo would faciliate
      it's own parser/query engine (which unfortunately is also limited) to process this data.<br/>
      Another current disadvantage of MDB Tools is that it doesn't handle UTF8, and since jet4 databases
      stored their data in UTF8, this implies that it cannot be used for jet4 databases containing non-ASCII
      characters (well, probably a little bit more that ASCII, but it's a serious limitation for an product as
      international as OpenOffice.org).</p>

      <p>Another way would be to re-engineer the MDB format ourself, and write a native SDBC driver (which could
      be in C++ or probably even in Java) which provides the data. This is similar to the first approach, where
      MDB Tools would have been used as the provider of raw data.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>C++</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>familiarity with OOo's database access API</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>2 months</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>medium</td>
          </tr>
        </tbody>
      </table>
      <br/>
		  
      <hr style="width: 100%; height: 2px;">

      <!-- ====================== -->
      <!-- SDBC driver for vCards -->
      <h3><a name="vcards"></a>SDBC driver for vCards</h3>
      <h4>description</h4>

      <p>OpenOffice.org has it's own open database access API called <a href="http://api.openoffice.org/docs/common/ref/com/sun/star/sdbc/module-ix.html">SDBC</a>
      which is modeled on the architecture of <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/package-summary.html">Java's
      JDBC</a>. SDBC supports several databases and
      database-like API's via an extensible provider architecture; ODBC 3.0, JDBC,
      ADO, dBase and CSV are among the databases and database management systems
      currently supported. Each SDBC provider is implemented as a UNO component.</p>

      <p>It could be useful to have a dedicated driver for accessing vCards.
      There is an infrastructure in the existing SDBC implementations for file-based
      databases, which could be relatively easily specialized for vCard access. This would
      broaden the range of address book data which can be used in OpenOffice.org.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>C++</li>
                <li>familiarity with UNO</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>familiarity with OOo's database access API</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>2 weeks</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>medium</td>
          </tr>
        </tbody>
      </table>
      <br/>
		  
      <hr style="width: 100%; height: 2px;">

      <!-- ================= -->
      <!-- New Filter Dialog -->
      <h3><a name="new_filter"></a>New Filter Dialog</h3>
      <h4>description</h4>
      <p>Similar to the Sort Dialog, there is a dialog which allows to filter queries
      and tables &#8211; it can be reached the same way as the sort dialog, by using
      the "Default Filter..." button in the toolbox of the data source browser.</p>
      <p>This dialog suffers from some disadvantages:
      <ul>
        <li>
          it's not dynamic, three filter criterions are the maximum</li>
        <li>
          The dialog does not really clearly distinguish between ORing and ANDing
          filters. Though there the user can make a choice for AND or OR, it's not clear
          what is the result if these are
          <span style="font-style: italic;">mixed</span>. This UI is simply not
          intuitive.<br/>
        </li>
      </ul>
      This dialog should be re-implemented, so that it's functionality is extended
      and it's more intuitive. Design (before implementation) is an important part of
      this project.</p>
      <p>One other place where a similar functionality is available is the
      <span style="font-style: italic;">filter navigator</span>
      in the
      <span style="font-style: italic;">form based filter</span>.</p>
      <p>This will show the so-called filter navigator, which uses a tree view to
      represent the currently used filter for the form. It has other disadvantages
      <ul>
        <li>
          it's impossible to add a filter with two AND criterions for the same column,
          such as "name LIKE '%Foo%" and "name LIKE '%Bar%'".</li>
        <li>
          it's not intuitive, too (well, this is personal taste :)</li>
        <li>
          some functionality cannot be accessed from within the navigator, but only by
          entering text in the form fields (for instance, try creating a new filter in a
          form which previously does not have any filter<br/>
        </li>
      </ul></p>
      <p>If the interface of the new implementation of the filter control in the new
      filter dialog is abstract enough, then on the long term we can use it for the
      filter navigator, too. This would require some discipline in designing the
      classes for the new implementations, and some abstraction capabilities.
      However, this is not the primary goal of this implementation.</p>

      <table style="text-align: left;" cellspacing="0">
        <tbody>
          <tr>
            <td class="effort_header" width="200px">required skills</td>
            <td>
              <ul>
                <li>C++</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">useful skills</td>
            <td>
              <ul>
                <li>familiarity with VCL (OpenOffice.org's visual toolkit)</li>
              </ul>
            </td>
          </tr>
          <tr>
            <td class="effort_header">estimated effort</td>
            <td>1 month for an experienced developer</td>
          </tr>
          <tr>
            <td class="effort_header">difficulty</td>
            <td>medium - high</td>
          </tr>
        </tbody>
      </table>
		  
      <hr style="width: 100%; height: 2px;">

    </div>
  </body>
</html>
