Table of Contents
The community exists mainly through mailing lists and a source repository. To participate:
Go to http://www.mmbase.org and
There are many ways to join the project, either by writing code, or by testing and/or helping to manage the bug database. If you'd like to contribute, then look at:
The bugs/issues/wishes database. http://www.mmbase.org/bugs
To submit code, simply send your patches to developers@lists.mmbase.org after you have read the rest of this file.
To help manage the issues database, read over the issue summaries, looking and testing for issues that are either invalid, or are duplicates of other issues. Both kinds are very common, the first because bugs often get unknowingly fixed as side effects of other changes in the code, and the second because people sometimes file an issue without noticing that it has already been reported. If you are not sure about an issue, post a question to developers@lists.mmbase.org.
A rough guide to the source tree from the CVS 'all' module:
documentation/ User and Developer documentation. config/ Default MMBase configuration files html/ MMBase general web pages like editors and admin interface src/ Source code to MMBase itself (as opposed to external libraries). tests/ Automated test suite. applications/ Stuff that works with MMBase, but that MMBase doesn't depend on. applications/bugtracker Sources of the bugs/issues database applications/cloudcontext Sources of the cloudcontext security implementation applications/crontab Sources of scheduling framework applications/dove Sources of xml communication interface applications/editwizard Sources of editors which can be defined by xml applications/email Sources of email application applications/media Sources of media framework applications/packaging Sources of packaging application applications/rmmci Sources of RMI communication applications/taglib Sources of taglibrary applications/xmlimporter Sources of xml import application
Read http://java.sun.com/docs/codeconv/ for a full description of the Sun coding standards; but here is a short example demonstrating the most important formatting guidelines:
/** * Documentation of method * * @param arg1 Description of parameter * @param arg2 Description of parameter * @return expected return values */ private static final int foo(int arg1, int arg2) { /* Use visibility modifier first */ try { /* Brace on same line, indent 4 */ if ((some_very_long_condition && arg2 == 1) || remaining_condition) { /* Generally use the 8-space rule */ int v = 10 + someFunction(arg1, arg2); /* Use space around operators */ return v; } else { /* Else on same line as close brace */ return 1; /* Don't use magic numbers like these */ } /* close brace on own line */ } catch (Exception e) { /* Catch on same line as close brace */ //documentation of code } finally { /* Finally on same line as close brace */ } return 3; }
In general, be generous with parentheses even when you're sure about the operator precedence, and be willing to add spaces and newlines to avoid "code crunch". Don't worry too much about vertical density; it's more important to make code readable than to fit that extra line on the screen.
We understamd that formatting is a matter of taste and that many developers prefer other formmatting styles, but try to stick to the guidelines. We are using them to keep the code readable. Don't take it personally when someone points you to the coding standards when you submit some code. We will accept your code anyway.
Certain guidelines should be adhered to when writing log messages for code changes:
Fix issue #1729: Don't crash because of a missing file.
There are some common-sense exceptions to the need to name everything that was changed:
This is part of the MMBase documentation.
For questions and remarks about this documentation mail to: documentation@mmbase.org