[jsword-devel] JSword collaboration opportunities
DM Smith
dmsmith555 at yahoo.com
Mon Dec 11 08:33:49 MST 2006
Everyone,
We now have an open area for collaboration, called incubator. You can
find it under svn here:
http://www.crosswire.org/svn/jsword/trunk/incubator
Create Eclipse projects under this location. For example, if you are
creating a RCP version of Common, create a plugin project:
http://www.crosswire.org/svn/jsword/trunk/incubator/common
As I make changes and apply patches to Common and JSword, I'll try to
keep these in sync and run what ever JUnit tests you provide.
Feel free to comment as this is our community.
Everyone has permission to read and write code in this area and because
of that we need some simple guidelines.
1) Always provide a short message when doing a checkin. It does not have
to be elaborate but should suggest what you are doing.
2) Always prefix the short message with your name, initials or something
by which we know it is you. Because everyone has read/write permission
all checkins are anonymous and show up as being done by "Apache".
3) Always prefix the file with JSword's standard license statement: for
GUI code, the license is GPL. For library code it is LGPL. Licenses of
borrowed code must be compatible with these and those licenses are
retained on the borrowed code. Lots of opportunity for more
clarification/discussion as the need arises.
4) If you are the author of the code, include it in the file with the
following pattern: @author DM Smith [dmsmith555 at yahoo dot com]. Also
add your @author to the bottom of the list if you made a significant
contribution. But not if your change was minor.
5) For each project provide an Ant build.xml so that it can be built
from a command line on the crosswire server.
Coding Guidelines:
1) Use Checkstyle, FindBugs, PMD, shared Eclipse Java coding style rules
to maintain code quality and consistency.
2) Write JUnit tests for new classes and new behavior.
3) Don't unnecessarily change code. Consider a Bridge Pattern, if needed.
4) Focus on good design and correctness early. Optimize late.
5) Code to interfaces with minimal coupling. For example, in adding an
"sermon outline" capability, create a Outline interface which does not
know about Jobs or Progress but does know about the things that pertain
to Outlines.
6) Minimize code duplication. It may be better to wrap the existing
JSword implementation than to duplicate it. It may be better to change
JSword or Common than to fork either. Before creating a fork, lets
discuss it to see if there is a better way.
RCP opportunities:
1) OSGi: JSword uses interfaces to define fundamental behavior and
factories to deliver that behavior. The factories use a custom mechanism
for obtaining the behavior. In some factories we allow for only one
behavior, but some allow for more than one. These would be a perfect
candidate for using the OSGi plugin model. Note: it is possible to use
this without incurring the cost of the entire RCP.
2) Persistence: This is one of the most requested features for
BibleDesktop. The basic idea is that the application would start where
it left off. We have put this off because it is a core capability of RCP.
3) Configuration: Common provides an ability for an application (in this
case BibleDesktop) to provide options to the user. This consists of
model, controller (common project) and view code (common-swing). RCP
provides a much more complete and mature mechanism.
4) Progress: RCP provides a robust progress mechanism. No sense in
having duplication.
5) Jobs: RCP provides a job mechanism. Again duplication should be avoided.
BibleDesktop GUI opportunities:
Once we have a stable RCP implementation for JSword and Common we can
entertain writing a SWT/JFace version of BibleDesktop:
1) Browser: The HTML rendering of Swing is terribly primitive. It is
desirable to use a robust HTML browser. This was our initial reason for
looking at SWT. It has robust broswer capabilities that let us do
everything that we currently do (i.e. intercept urls with novel
protocols, i.e. bible:// with a custom handler) and it allows us to do
anything else we can't currently do. While this has nothing to do with
RCP, it is still a primary motivation for going to RCP.
2) Adaptable UI: Different users have different workflows. The user
should be able to arrange the UI to suit their own needs. One user might
want a simple daily devotion. Another a robust search engine. Another
works from left to right, while another from top to bottom.
3) Additional Behavior: One of the hallmarks of RCP is the ability for
new behavior to be added without disturbing the existing code base. A
developer should be able to add a new behavior to JSword or
BibleDesktop, such as blogging or sermon preparation, without the
overhead of knowing all the ins and outs or JSword. And a user should be
able to pick and choose from behaviors that are available, incurring the
cost of a behavior only if they choose it.
Other UI Targets:
1) PDA/phone/handheld: A very desirable goal, but currently JSword and
Common have code that is outside the J2ME set of classes. We should work
in a fashion that makes this goal more attainable, not less. If someone
would like to survey JSword and Common for
2) Web applications: These could take many forms, for an example, see
http://eireneh.com/studious
More information about the jsword-devel
mailing list