Rational Rose is probably the most widely used tool for software engineering processes, although it has some deficiencies (which we will not discuss here). In this project we tried to tackle one of them related to the ``roundtrip engineering'' process. One can import source files into Rose and create class diagrams from them. Vice versa one can create classes (and IDL specifications or whatever you need) from class (and other) diagrams. Yet these creation processes can not be influenced by the user in a convenient, flexible and extensible way. Another problem is that these models are proprietary and some people would like to have the possibility to write a converter for these models into a different format used by another tool, XMI, for example.
Every application developed and also every company follows different policies and may need different conventions for the generated code. So it is clearly desirable for them to influence the way in which diagrams and other data are mapped to source code and vice versa. For example, one company might have the convention to attach notes to classes and associations containing OCL statements (or whatever). Rose would not regard them when creating code, but a tool specifically adapted for this need could do so (see OCL-Compiler).
So how can all this be accomplished? Well, the easiest way is to have an API that is capable of reading and writing the files created by Rational Rose, called ``Petal files'' (ending with .mdl or .ptl) which contain the given model of the application. The file format is undocumented, I'll try to explain it in this document anyway. As you'll probably have guessed already, the CrazyBeans project is intented just to provide you that: An extensible framework to generate code or to read, modify, analyze and create models, released under the Apache Public License.
CrazyBeans is © 2001 M. Dahm. Last change 2001/10/17.
Please tell me, if you find this tool helpful, have found bugs or want to make suggestions. I'd also be interested in what kind of projects you use it.