For each page, there must be one adapter class. The name of the adapter class is given
inside the PAGE tag of a page by the corresponding model
property. Several page definitions can point to one adapter class, for example, when you
have several page variants to display the same logical content.
The Application Designer runtime can create an adapter instance of a page in two ways:
Direct Class Binding
The Application Designer runtime directly tries to create an adapter instance from the name in the
model
property of the PAGE tag of the page.
Generic Class Binding
If the direct class binding does not succeed, the Application Designer runtime tries to create a
generic adapter instance that has to be made accessible by the application.
Option 1 is the typical one. Option 2 is a solution if you require an adapter to be used very generically inside your framework.
The following topics are covered below:
The following page definition forces the Application Designer runtime to look for a
Test1Adapter
class inside the package
com.softwareag.cis.test
:
<page model="com.softwareag.cis.test.Test1Adapter"> ... ... ... </page>
The class itself is derived typically from the class
com.softwareag.cis.server.Adapter
:
package com.softwareag.cis.test; import com.softwareag.cis.server.Adapter; public class Test1Adapter extends Adapter { // ------------------------------------------------------------------------ // constructor - without parameters // ------------------------------------------------------------------------ public Test1Adapter() { } // ------------------------------------------------------------------------ // public access // ------------------------------------------------------------------------ /** The init message is called when an object is created and all * runtime aspects are correctly set inside the adapter. */ public void init() { ... ... } }
The default constructor is required (without any parameters).
If the runtime does not find the class, it tries to find a generic one. The name of the generic class is created in the following way:
The package name is taken from the model
property of
the PAGE tag of your page definition.
The class name is "GenericAdapter".
Example: if you bind a page to the class
com.softwareag.cis.test.Test2Adapter
and the runtime system
cannot locate the class Test2Adapter
, the system tries to load
the class GenericAdapter
in the same package as the class that
could not be found:
<page model="com.softwareag.cis.test.Test2Adapter"> ... ... ... </page>
The generic adapter is just a normal adapter which typically supports the dynamic binding of properties (see below).
package com.softwareag.cis.test; import com.softwareag.cis.server.Adapter; public class GenericAdapter extends Adapter { /** */ public void init() { System.out.println("My original class name is " + this.m_modelName); } }
Each adapter object can access the m_modelName
member. This member is set
after the initialisation of the object. It holds the original adapter name to which the
page refers.