Rose/Corba mapping: introduction, IDL mapping, страница 5

readonly = Role.IsReadOnly property

type – scoped name of the class which represents the user-defined type

declarator – name of the supplier role of the relationship

dimension – cardinality of the supplier role of the relationship

Note:  When the resultant IDL is reverse engineered a nested class which represents the typedef will be generated.  That class will be the supplier in a relationship with the class which represents the interface.

Unbounded Sequence of User-defined Types

IDL SEMANTICS

typedef sequence<type> declarator_def;

[readonly] declarator_def declarator

This compound construct can be represented in a Rose model as a relationship of unbounded cardinality which has the class which represents the user-defined type as its supplier by setting the Role.BoundedRoleType property to 'Sequence'.

readonly = Role.IsReadOnly property

type – scoped name of the class which represents the user-defined type

declarator – name of the supplier role of the relationship

Note:  When the resultant IDL is reverse engineered a nested class which represents the typedef will be generated. That class will be the supplier in a relationship with the class which represents the interface.

PROPERTIES

Attribute Properties

·  IsReadOnly (Boolean FALSE) – Generate the readonly modifier

·  ArrayDimensions (String "") – If non-blank, indicates that the declarator is an array and defines the array dimension(s) portion of the declarator.

Role Properties

·  IsReadOnly (Boolean FALSE) – Generate the readonly modifier.

·  ArrayDimensions (String "") – If non-blank, indicates that the declarator is an array and defines the array dimension(s) portion of the declarator.

·  BoundedRoleType (Enumeration Array, Sequence) – Whether to use an array or sequence to represent a relationship with bounded cardinality.  Unbounded cardinality always generates an unbounded sequence.  The cardinality of the relationship defines the size of the array or sequence.

Note:  current implementation does not support multiple declarators though IDL grammar does. They are RE’d and subsequently FE'd as separate attributes.

3.15  INTERFACE OPERATION

Maps to an operation of the class.

IDL SEMANTICS:

 [oneway] oper_type oper_name (param_attr1 param_type1 param_decl1, param_attr2 param_type2 param_decl2, …) raises_expr context_expr;

oper_type = operation return type

oper_name = operation name

param_attrn param_typen = type of nth parameter.  param_attrn must equal in, out, or inout and be specified as part of the operation type.

Param_decln = name of the nth parameter

raises_expr = operation exceptions

context_expr = operation.Context property

PROPERTIES

Operation Properties

·  OperationIsOneWay (Boolean FALSE) – Generate oneway modifier

·  Context (String "") – Context expression

4  FORWARD ENGINEERING

4.1  Selection of Components for Forward Engineering

The basic unit of forward engineering is a component whose assigned language is CORBA.  Component packages, logical packages, and classes may also be selected to initiate forward engineering.

If a component package is selected all the components which derive directly or indirectly from that package are forward engineered.

If a logical package is selected all the classes which derive directly or indirectly from that package are considered.  For each class which has CORBA as its assigned language, its assigned component is forward engineered. 

Suggestion:  If a package represents an IDL module all the classes which derive from it must be assigned to the same component.  If this is not the case a dialog is presented which allows the user to rectify the situation or cancel the forward engineering request.

If a class whose assigned language is CORBA is selected its assigned component is forward engineered.  If such a class has no assigned component one is created in the Component View package. If an attempt is made to forward engineer any classes whose assigned language is not CORBA a warning is generated.