非常によく似た要件がありましたが、RCP は使用しませんでした。作成した UI の構造を XML に保存して、UI を再度読み込む必要がある場合はいつでも読み込まれるようにしたいと考えています。したがって、XML を使用している場合は、UI を表す XML 標準ドキュメントのスキーマまたは XSD テンプレートを使用する必要があると思います。UI、サンプルで許可される要素を定義します: ボタン、テキストフィールド、ラベルなど。
xsd に慣れていない場合は、最初に xml を定義してから xsd ジェネレーターを使用できます。それらの多くはオンラインにあります。
例えば:
<UIBuilder>
<ownerProperties>
<username>Marcelo Tataje</username>
</ownerProperties>
<ui>
<header>
<textlabel label="Welcome" />
</header>
<menu>
<button label="Home" name="btnHome">goHome()</button>
<button label="Contacts" name="btnContacts">showContacts()</button>
</menu>
<mainFrame>
<textfield label="Name:" name="txtName" canEdit=false />
<button label="Show name" name="btnProcess">processData()</button>
</mainFrame>
<footer></footer>
</ui>
<UIBuilder>
これに基づいて、スキーマを作成できます。
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="UIBuilder">
<xs:complexType>
<xs:sequence>
<xs:element name="ownerProperties">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="username"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ui">
<xs:complexType>
<xs:sequence>
<xs:element name="header">
<xs:complexType>
<xs:sequence>
<xs:element name="textlabel">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="label"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="menu">
<xs:complexType>
<xs:sequence>
<xs:element name="button" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="label" use="optional"/>
<xs:attribute type="xs:string" name="name" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="mainFrame">
<xs:complexType>
<xs:sequence>
<xs:element name="textfield">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="label"/>
<xs:attribute type="xs:string" name="name"/>
<xs:attribute type="xs:string" name="canEdit"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="button">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="label"/>
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element type="xs:string" name="footer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
http://www.freeformatter.com/xsd-generator.htmlを使用しました
そして Jaxb を使用して論理処理を作成し、定義された整形式の XML ドキュメントに基づいて UI を作成します。