Internal representation of the BIRT report elements and items.

## Package Specification

This package contains the implementation of each element defined in the Report Object Model (ROM). Each element is represented by a subclass of `DesignElement`. Most properties are represented generically as items on a property list. Most element classes need implement only a few methods.

The process for adding a new element to the system is the following:

1. Define the element in the report design XML schema file.
2. Add property entries in rom.def for each property defined in the element.
3. Define the display name key of the element and all the properties in the message file in the `org.eclipse.birt.report.model.i18n` package.
4. If the element has a style, then list in rom.def the style properties that should be visible on the element.
5. Define the implementation of the element in the rom.def file
6. If the element has choice properties, and those choices have not yet been defined, add them to rom.def.
7. If the element has a property that consists of a list of objects, define the objects as structures in rom.def.
8. Create the element class in this package as subclass of `DesignElement`, `ReportItem` or some other element base class.
9. Define a default constructor and one that takes the name..
10. Add a member variable to represent slots, if any.
11. Implement `getElementName` to return the name of the element as defined in the meta-data dictionary.
12. Implement the `apply` method and the corresponding `visitMumble` method in the `ElementVisitor` class.
13. Implement the `getHandle` method to create a handle to the element.
14. Define the handle class in the `org.eclipse.birt.report.model.api` package.
15. Review the properties of the element. Decide which to implement as methods on the handle class. Implement that set.
16. Implement parser support for the element in the `org.eclipse.birt.report.model.parser` package.
17. Implement design writer support for the element in the `org.eclipse.birt.report.model.writer` package.
18. Create unit tests and test all aspect of the element: parser, properties, slots, handle, etc.

The best way to proceed is to look at an example. Good examples are {@link org.eclipse.birt.report.model.elements.DataItem}, {@link org.eclipse.birt.report.model.elements.DataSet}, and {@link org.eclipse.birt.report.model.elements.ListItem}.

## Related Documentation

The reader should be familiar with the BIRT Reporting Object Model (ROM) as defined in the following documents. The comments in classes here don't explain the ROM itself; only how the classes here implement the ROM. The reference documents explain, for example, what a List element does, what a List Group is, and so on. This is essential background information for working with this package.

- BIRT design file schema.
- BIRT Report Elements specification.
- BIRT Design File Schema specification.
- The Reporting Object Model definition file, rom.def, contains the meta-data definitions of the report elements. Use this to determine property names, types and characteristics. It also defines the choices for choice properties, the set of elements, the inheritance relationships between elements, and so on.

@see org.eclipse.birt.report.model.core.DesignElement @see org.eclipse.birt.report.model.elements.ReportItem