/**** * * Class RSLToUML contains functions to translate an RSL spec into a UML * diagram, per the following conventions: * * (1) The top-level objects of the components hierarchy are identified * as those objects that are a component of no other object and inherit * from no other object. If no such objects exist, the top-level * objects are identified as those that are a component of the fewest * other objects. Once identified, the top-level objects are displayed * as the top-most (geometrically leftmost) diagram nodes. * * (2) The top-to-bottom order of the top-level nodes is from largest to * smallest in size, where size is measured in terms of the transitive * number of components for each top-level object. The order of * objects of the same size is alphabetic by name. * * (3) For an object that is inherited from, its inheritees are shown * immediately to the right, extending downward, connected with a * hollow left-pointing arrow. The top-to-bottom order of inheritees * is alphabetic by name. * * (4) For each object that has components, the atomic components are shown * immediately below the parent object name in the second part of a * three-part box, in declared order. Non-atomic components are shown * immediately to the right, extending downward in declared order, * connected with a hollow diamond symbol. * * (5) Union components are denoted with a vertical bar when atomic, or * with a hollow diamond with the word "or" as a superscript when * non-atomic. * * (6) Anonymous non-atomic components are shown with the name * "Anonymous". * * (7) Operations are shown in the third part of a three-part box for each * object that has operations. The operations are identified as those * (and only those) explicitely listed in the operations attribute, if * the operations attribute is defined. If the operations attribute is * not defined, the object's operations are identified as those in * which the object appears at least once in the signature. The * top-to-bottom order of identified (as opposed to declared) * operations is in three groups, alphabetic within each group: (1) obj * is both input and output, (2) object is output only, (3) object is * input only. */