blob: 7fd59562dd65854e06c13898a21ef28f06e23c82 [file] [log] [blame]
<!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>