The model adapter layer abstracts attribute access and meta information from the model, thus the framework can use any kind of model and utilize any kind of meta-information available e.g. for type conversion, enhanced validation, enum binding to combo boxes and the like.
The interfaces needed are defined in the ModelAdapter layer. You can use widget wrappers without needing a model adapter, but you cannot use binding or table support without a ModelAdapter, since both need a way to access model attributes and determine attribute types.
It additionally enhances data binding by providing a ConverterRegistry utilizing several enhanced converters for null value handling for swt widgets, boolean conversion and date conversion.
The ModelAdapter base class defines the interfaces needed by the bindingvalidation and tablesupport layers and provides a registry to register model adapters for your specific models. A standard model adapter for Java beans is used if no other one is found.
Please look into ModelAdapter, the BeanAdapter implementation for Java Beans
and the test case BeanAdapterTest to get an idea how to provide your own model adapters.
The idea here is that the model contains not only all data displayed in the form, but also contains the state information for the UI, thus all information defining the variable appearance of a form resides here. See Martin Fowlers Presentation Model Article. To access the information in the model, a string is passed; the model adapter can access the attribute using this string; it also can create an ObservableValue for the attribute which enables it for data binding. If you use one of the standard model adapters for beans or EMF, you don't really have to care about ObservableValues because they will be just created for you behind the scenes.
If you have a model like Person which has a model as attribute like Address, you can access the street for the address using nested properties; e.g. you specify "address.street" as property name and the model adapter will work it out.
Have a look at the BeanAdapter or the net.sf.rcpforms.emf.modeladapter plugin to see how it works. Make sure to create a unit test analogous to the one provided for the BeanAdapter. If these tests work, you will have a good chance that your adapter works with RCPForms.
For further details see use your own model